Contenido


Entender los archivos de configuración de Linux

Clasificaciones y utilización

Todos los programas Linux están formados por un archivo ejecutable que contiene la lista de códigos de operaciones que la CPU ejecuta para lograr operaciones específicas. Por ejemplo, el comando ls lo proporciona el archivo /bin/ls, que contiene la lista de instrucciones automáticas que son necesarias para mostrar en la pantalla la lista de archivos que se encuentran en el directorio actual. Puede personalizar el comportamiento de casi cada programa según sus preferencias o necesidades mediante la modificación de sus archivos de configuración.

¿En Linux hay algún formato estándar para el archivo de configuración?

En una palabra, no. Los usuarios que son nuevos en Linux se sienten frustrados (con razón) porque cada archivo de configuración parece un nuevo desafío a solucionar. En Linux cada programador puede elegir el formato del archivo de configuración que prefiera. Las opciones del formato varían de los archivos /etc/shells, que contienen una lista de shells posibles, separados por una línea nueva, a los complejos archivos /etc/httpd.conf de Apache.

¿Qué son los archivos de configuración del sistema?

El propio kernel se puede considerar un "programa". ¿Por qué el kernel necesita archivos de configuración? El kernel necesita saber la lista de usuarios y grupos que hay en el sistema, y gestiona los permisos de los archivos (es decir, determina si un archivo puede ser abierto por un usuario específico, según los permisos UNIX_USERS). Observe que esos archivos no son leídos específicamente por los programas, sino por una función proporcionada por la biblioteca del sistema, y son usados por el kernel. Por ejemplo, un programa que necesita la contraseña (cifrada) de un usuario no debería abrir el archivo /etc/passwd. En vez de eso, debería llamar a la función getpw() de la biblioteca del sistema. A este tipo de función también se la conoce como llamada de sistema. El kernel decide (a través de la biblioteca del sistema) si abre el archivo /etc/passwd y, después de eso, busca la contraseña para el usuario solicitado.

La mayoría de los archivos de configuración del sistema Red Hat Linux se encuentran en el directorio /etc salvo que se especifique de otra manera. Los archivos de configuración se pueden clasificar en las siguientes categorías:

Archivos de acceso

/etc/host.confDice al servidor del dominio de la red cómo debe buscar los nombres de host. (Normalmente es /etc/hosts y después el nombre del servidor; se puede cambiar a través de netconf.)
/etc/hostsContiene una lista de hosts conocidos (en la red local). Se puede utilizar si la IP del sistema no se generase dinámicamente. Para la resolución simple del nombre del host (a notación con puntos), /etc/hosts.conf normalmente dice al resolutor que busque aquí antes de preguntar al servidor de nombres de la red, DNS o NIS.
/etc/hosts.allowPágina del manual igual que hosts_access. Leído por tcpd, al menos.
/etc/hosts.denyPágina del manual igual que hosts_access. Leído por tcpd, al menos.

Arrancar e iniciar sesión/cerrar sesión

/etc/issue & /etc/issue.netMingetty (y programas similares) lee esos programas para mostrar una cadena de caracteres de "bienvenida" al usuario que se conecta desde un terminal (issue) o a través de una sesión de telnet (issue.net). Incluyen algunas líneas que declaran el número de versión de Red Hat, el nombre y el ID del Kernel. Son usados por rc.local.
/etc/redhat-releaseIncluye una línea que declara el número y el nombre de la versión de Red Hat. Es usado por rc.local.
/etc/rc.d/rcNormalmente se ejecuta para todos los niveles de ejecución, pasando el nivel como argumento. Por ejemplo, para arrancar la máquina en modo de Gráficos (X-Server), hay que ejecutar el siguiente comando desde la línea de comando. init 5. El nivel de ejecución 5 es "empezar el sistema en modo de gráficos".
/etc/rc.d/rc.localNo oficial. Se puede llamar desde rc, rc.sysinit, o /etc/inittab.
/etc/rc.d/rc.sysinitNormalmente, el primer script se ejecuta para todos los niveles de ejecución.
/etc/rc.d/rc/rcX.dLos scripts se ejecutan desde rc (X puede ser cualquier número entre 1 y 5). Esos directorios son directorios específicos para el "nivel de ejecución". Cuando un sistema se inicia, identifica el nivel de ejecución que debe iniciar y, después, llama a todos los scripts de arranque que están presentes en el directorio específico para ese nivel de ejecución. Por ejemplo, el sistema normalmente arranca y muestra el mensaje "entrando en nivel de ejecución 3" después de los mensajes de arranque; esto significa que se llamará a todos los scripts init del directorio /etc/rc.d/rc3.d/.

Sistema de archivos

El kernel proporciona una interfaz para mostrar algunas de sus estructuras de datos, lo que puede ser útil para determinar los parámetros del sistema, interrupciones usadas, dispositivos instalados, estadísticas de memoria, etc. Esta interfaz se proporciona como un sistema de archivos diferente, pero ficticio, conocido como el sistema de archivos /proc. Muchas utilidades del sistema utilizan los valores que están presentes en este filesystemf o que muestran las estadísticas del sistema. Por ejemplo, el archivo /proc/modules hace una lista con los módulos que están cargados en el sistema. Esta información es leída por el comando lsmod, que después la muestra en un formato legible por los humanos. De la misma manera, el archivo mtab, que se especifica en la siguiente tabla, lee el archivo /proc/mount, que contiene los sistemas de archivos que están montados.

/etc/mtabEsto cambia continuamente a medida que cambia el archivo /proc/mount. En otras palabras, cuando los sistemas de archivos se montan o desmontan, el cambio se refleja inmediatamente en este archivo.
/etc/fstabHace una lista con los sistemas de archivos que la computadora puede "montar" en ese momento. Esto es importante porque cuando la computadora arranca, ejecuta el comando mount -a, que se ocupa de todos los sistemas de archivos que estén marcados con un "1" en la penúltima columna de fstab.
/etc/mtools.confConfiguración para todas las operaciones (mkdir, copy, format, etc.) en un sistema de archivos tipo DOS.

Administración del sistema

/etc/groupContiene los nombres de los grupos válidos y los usuarios que están incluidos en los grupos específicos. Un único usuario puede estar presente en más de un grupo si ejecuta varias tareas. Por ejemplo, es un "usuario", el administrador y el miembro de un grupo de un proyecto "project 1". Entonces, esta entrada en el archivo del grupo se parecería a esto: user: * : group-id : project1
/etc/nologinSi el archivo /etc/nologin existe, login(1) solo permitirá el acceso al usuario principal. A los otros usuarios se les mostrará el contenido de este archivo y se rechazarán sus inicios de sesión.
etc/passwdVea "manual de passwd". Contiene algo de información de la cuenta de usuario, entre ella las contraseñas (cuando no están "sombreadas").
/etc/rpmrcConfiguración del comando rpm. Todas las opciones de la línea de comando rpm se pueden establecer a la vez en este archivo, para que todas las opciones se apliquen globalmente cuando se ejecute cualquier comando rpm en ese sistema.
/etc/securettyContiene los nombres del dispositivo de las líneas tty (una por línea, sin /dev/ inicial) sobre los que el usuario principal puede iniciar sesión.
/etc/usertty
/etc/shadow
Contiene la información cifrada de la contraseña para las cuentas de los usuarios y, opcionalmente, la información de la antigüedad de la contraseña. Los campos que incluye son:
  • Nombre de inicio de sesión
  • Contraseña cifrada
  • Días desde el 1 de enero de 1970 hasta cuando la contraseña se cambió por última vez
  • Días de anterioridad en los que la contraseña puede ser cambiada
  • Días tras los que la contraseña se debe cambiar
  • Días de aviso anticipado al usuario antes de que la contraseña vaya a caducar
  • Días tras los que la cuenta se inhabilita después de que la contraseña haya caducado
  • Días desde el 1 de enero de 1970 en los que la cuenta está desactivada
/etc/shellsContiene la lista de "shells" posibles que están disponibles para el sistema.
/etc/motdMensaje del Día; se utiliza si un administrador quiere transmitir algún mensaje a todos los usuarios de un servidor Linux.

Establecimiento de contactos

/etc/gated.confConfiguración para gated. Solo se utiliza por el gated daemon.
/etc/gated.versionContiene el número de versión del gated daemon.
/etc/gatewayEs opcionalmente usado por el routed daemon.
/etc/networksHace una lista de nombres y direcciones a las que se puede acceder desde la red a la que la máquina está conectada. Se utiliza por el comando "route". Permite utilizar un nombre para la red.
/etc/protocolsHace una lista con los protocolos que están disponibles en ese momento. Vea la NAG (Guía de Administradores de Red, por sus siglas en inglés) y la página del manual.
La interfaz de C es getprotoent. No debería cambiar nunca.
/etc/resolv.confDice al kernel cuál es el nombre del servidor que se debería consultar cuando un programa pide "resolver" una Dirección IP.
/etc/rpcContiene las instrucciones/reglas para el RPC, que se puede utilizar en llamadas NFS, montar remotamente archivos del sistema, etc.
/etc/exportsEl sistema de archivos a ser exportado (NFS) y los permisos para el mismo.
/etc/servicesTraduce los nombres del servicio de red a números de puerto/protocolos. Leído por inetd, telnet, tcpdump, y por algunos otros programas. Estas son rutinas de acceso de C.
/etc/inetd.confArchivo de configuración para inetd. Vea la página del manual de inetd. Contiene una entrada por cada servicio de red por la que inetd deba controlar demonios y otros servicios. Observe que los servicios se estarán ejecutando, pero coméntelos en /etc/services para que no estén disponibles ni siquiera si se están ejecutando. Formato: <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
/etc/sendmail.cfEl archivo de configuración de sendmail del programa Mail. Cryptic para entender.
/etc/sysconfig/networkIndica NETWORKING=sí o no. Leído por rc.sysinit, al menos.
/etc/sysconfig/network-scripts/if*Scripts de configuración de la red de Red Hat.

Comandos del sistema

Los comandos del sistema sirven exclusivamente para controlarlo y para hacer que todo funcione correctamente. Todos los programas como "login" (realizar la fase de autentificación de un usuario en la consola) o "bash" (proporcionar la interacción entre un usuario y la computadora) son comandos del sistema. Los archivos que están asociados a ellos son, por lo tanto, particularmente importantes. Esta categoría tiene los siguientes archivos de interés para los usuarios y administradores.

/etc/lilo.confContiene los parámetros de la línea de comando de arranque predeterminado del sistema y las diferentes imágenes con las que tiene que arrancar. Es posible ver esto pulsando Tab en el prompt de LILO.
/etc/logrotate.confMantiene los archivos de registro que están presentes en el directorio /var/log.
/etc/identd.confIdentd es un servidor que implementa el protocolo de identificación de usuarios estándar IDENT propuesto para el TCP/IP, como se especifica en el documento RFC 1413. identd opera buscando conexiones específicas TCP/IP y devolviendo el nombre de usuario del proceso que es dueño de la conexión. Opcionalmente puede devolver otra información en vez del nombre de usuario. Vea la página del manual identd.
/etc/ld.so.confConfiguración para el Enlazador Dinámico.
/etc/inittabEste es cronológicamente el primer archivo de configuración en UNIX. El primer programa que se lanza después de encender una máquina UNIX es init, que sabe qué lanzar gracias a inittab. init lo lee en los cambios a nivel de ejecución, y controla la inicialización del proceso principal.
/etc/termcapUna base de datos que contiene todos los tipos posibles de terminales y sus capacidades.

Demonios

Un demonio es un programa que se ejecuta en modo no interactivo. Normalmente, las tareas de los demonios están relacionadas con el área de la red: esperan por conexiones, para poder brindar servicios a través de ellas. En Linux hay disponibles muchos demonios, que varían desde servidores web hasta servidores ftp.

/etc/syslogd.confEl archivo de configuración para el demonio syslogd. syslogd es el demonio que se ocupa del registro cronológico (escribir en disco) de los mensajes que provienen de otros programas del sistema. En particular, este servicio es utilizado por los demonios que, de otra manera, no tendrían ningún medio para señalizar la presencia de posibles problemas ni de enviar mensajes a los usuarios.

/etc/httpd.conf
El archivo de configuración para Apache, el servidor web. Este archivo normalmente no está en /etc. Se puede utilizar en /usr/local/httpd/conf/ o en /etc/httpd/conf/, pero, para asegurarse tiene que verificar la instalación particular de Apache.
/etc/conf.modules o /etc/modules.confEl archivo de configuración para kerneld. Irónicamente, no es el kernel "como un demonio". Más bien es un demonio que se encarga de cargar los módulos de kernel adicionales "sobre la marcha" cuando se necesitan.

Programas de usuario

En Linux (y, en general, en UNIXl), hay innumerables programas de "usuario". El archivo más habitual para configurar los programas de los usuarios es /etc/lynx.cfg. Este es el archivo de configuración para lynx, el conocido navegador textual. En este archivo se puede definir el servidor proxy, el carácter a utilizar, etc. La siguiente muestra de código muestra una parte del archivo lynx.cfg que se puede modificar para cambiar los ajustes del proxy del sistema Linux. Estos ajustes se aplican (de forma predeterminada) a todos los usuarios que ejecutan lynx en sus respectivos shells, salvo que un usuario sobrescriba el archivo de configuración predeterminado especificando --cfg = "mylynx.cfg.

Ajustes del proxy en /etc/lynx.cfg
.h1 proxy
.h2 HTTP_PROXY
.h2 HTTPS_PROXY
.h2 FTP_PROXY
.h2 GOPHER_PROXY
.h2 NEWS_PROXY
.h2 NNTP_PROXY
# La versión 2.2 de Lynx y las posteriores soportan la utilización de servidores proxy que pueden funcionar como
# gateways de firewall y servidores de memoria caché. Se prefieren a los antiguos
# servidores de gateway. Cada uno de los protocolos que Lynx utiliza se puede correlacionar de forma separada con
# las variables de entorno PROTOCOL_proxy (vea la Guía de Usuarios de Lynx). Si no los
# ha ajustado externamente, los puede ajustar en el momento de la ejecución a través de este archivo de configuración.
# No sobrescribirán los ajustes externos. La variable no_proxy se puede utilizar
# para inhibir la utilización de proxys para determinadas regiones de la Web (vea a continuación). Observe que en
# VMS esas variables del proxy se establecen como procesos lógicos en vez de como símbolos para
# preservar las letras minúsculas, y que sobrevivirán a la imagen de Lynx.
#
.ex 15
http_proxy:http://proxy3.in.ibm.com:80/
ftp_proxy:http://proxy3.in.ibm.com:80/
#http_proxy:http://penguin.in.ibm.com:8080
#ftp_proxy:http://penguin.in.ibm.com:8080/

.h2 NO_PROXY
# La variable no_proxy puede ser una lista separada por comas de las cadenas de caracteres que
# definen las zonas sin proxy del espacio de nombres del domino de DNS.  Si la subcadena de caracteres
# final de la ruta de dominio de un host coincidiese con una de esas cadenas de caracteres, las transacciones con ese
# nodo no irán a través de proxys.
.ex
no_proxy:demiurge.in.ibm.com, demiurge

Cambiar los archivos de configuración

Cuando cambie un archivo de configuración, asegúrese de que el programa que utiliza esa configuración sea reiniciado si no es controlado por el administrador del sistema o el kernel. Un usuario normal normalmente no tiene los privilegios para iniciar o para programas o demonios del sistema.

El kernel

Cambiar archivos de configuración en el kernel afecta inmediatamente al sistema. Por ejemplo, cambiar el archivo passwd para añadir un usuario, activa inmediatamente a ese usuario. También, en el directorio /proc/sys de cualquier sistema Linux hay algunos parámetros ajustables del kernel. El acceso de escritura para todos esos archivos solo se proporciona al superusuario; el resto de usuarios tienen acceso de solo lectura. Los archivos de este directorio se clasifican de la misma manera que el código fuente del kernel Linux. Cada archivo de este directorio representa una estructura de datos de un kernel que se puede modificar dinámicamente para cambiar el rendimiento del sistema.

Nota: Antes de cambiar cualquier valor de alguno de estos archivos, asegúrese de que sabe todo acerca del archivo, para evitar provocar daños irreparables al sistema.
Archivos del directorio /proc/sys/kernel/

Nombre de archivoDescripción
threads-maxNúmero máximo de tareas que el kernel puede ejecutar.
ctrl-alt-delSi es 1, presionar limpiamente esta secuencia de teclas reiniciará el sistema.
sysrqSi es 1, Alt-SysRq está activo.
osreleaseMuestra la versión del sistema operativo.
ostypeMuestra el tipo del sistema operativo.
hostnameEl nombre de host del sistema.
domainnameDominio de la red de la que el sistema forma parte.
modprobeEspecifica si modprobe se debería ejecutar automáticamente al inicializar, y carga los módulos necesarios.

Demonios y programas del sistema

Un demonio es un programa que siempre se está ejecutando en los procesos de fondo, realizando su tarea de forma silenciosa. Algunos comunes son in.ftpd (demonio de servidor ftp), in.telnetd (demonio de servidor telnet) y syslogd (demonio del registro cronológico del sistema). Mientras algunos demonios se están ejecutando, observan de cerca el archivo de configuración y lo recargan automáticamente cuando cambia. Pero, la mayoría de los demonios no lo recargan automáticamente. Les tenemos que "decir" de alguna manera que el archivo de configuración ha cambiado y que se debería recargar. Esto se puede lograr (en los sistemas Linux Red Hat) reiniciando los servicios con el comando "service".

Por ejemplo, si hemos cambiado la configuración de la red, tenemos que lanzar:
service network restart.

Observación: Los servicios son habitualmente los scripts que están presentes en el directorio /etc/rc.d/init.d/* y son iniciados por init cuando el sistema es arrancado. Así que, para reiniciar el servicio es posible hacer lo siguiente:
/etc/rc.d/init.d/<script-for-the-service> start | stop | status
start, stop y status son los valores que esos scripts toman como entrada para realizar la acción.

Programas de usuario

Los programas de usuario o de sistema leen sus archivos de configuración cada vez que son lanzados. Aunque, recuerde que algunos programas del sistema son generados cuando la computador se enciende, y su comportamiento depende de lo que leen en los archivos de configuración que están en /etc/. Por lo tanto, la primera vez que se inicia un programa de usuario, se lee la configuración predeterminada de los archivos que están presentes en el directorio /etc/. Posteriormente, el usuario puede personalizar los programas utilizando rc y archivos . (dot), tal como se explica en la siguiente sección.

Archivos de configuración del usuario: archivos . (dot) y archivos rc

Hemos visto cómo configurar los programas fácilmente. Pero, ¿y si a alguien no le gusta la forma en la que se ha configurado un programa en /etc/? Un usuario "normal" no puede ir a /etc y cambiar los archivos de configuración; ¡desde el punto de vista del sistema de archivos, son propiedad del usuario principal! Esa es la razón por la que la mayoría de los programas de usuarios definen dos archivos de configuración: el primero a nivel de "sistema", que se ubica en /etc/; y el otro, "privado" para el usuario, que se puede encontrar en su propio directorio inicial.

Por ejemplo, en mi sistema he instalado la muy útil utilidad wget. En /etc/ hay un archivo /etc/wgetrc. En mi directorio inicial hay un archivo llamado .wgetrc, que describe mi configuración personalizada (que solo será cargada cuando yo, el usuario, ejecute el comando wget). El resto de usuarios también pueden tener el archivo .wgetrc en su directorio inicial (/home/other); por supuesto que, este archivo solo se leerá cuando el usuario ejecute el comando wget. En otras palabras, el archivo /etc/wgetrc proporciona valores "predeterminados" para wget, mientras que el archivo /home/xxx/.wgetrc hace una lista con las "personalizaciones" para un determinado usuario. Es importante entender que esta es la "norma general", y no es necesariamente así para todos los casos. Por ejemplo, un programa como pine, no tiene todos los archivos /etc/, sino que la única configuración personalizada está en el directorio inicial del usuario en un archivo llamado .pinerc. Es posible que otros programas solo tengan un archivo de configuración predeterminada en /etc/, y que no permitan que los usuarios lo "personalicen" (es el caso de solo algunos archivos config. del directorio /etc.).

Archivos rc y . (dot) habitualmente usados
Nombre de archivoDescripción
~/.bash_login Eche un vistazo al "manual de bash". bash lo trata como ~/.bash_profile, si eso no existe.
~/.bash_logout Eche un vistazo al "manual de bash". Suministrado por los shells de inicio de sesión de bash a la salida.
~/.bash_profile Suministrado por los shell de inicio de sesión de bash después de /etc/profile.
~/.bash_history La lista de comando que han sido ejecutados anteriormente.
~/.bashrc  Eche un vistazo al "manual de bash". Suministrado por los shell interactivos que no son de inicio de sesión de bash (ningún otro archivo lo es). Los shells no interactivos no suministran nada salvo que se establezcan BASH_ENV o ENV.
~/.emacs Leído por emacs al inicializarse.
~/.forward
Si esto contiene una dirección de e-mail, todo el correo que se envíe al propietario de ~ se redireccionará a esa dirección de e-mail.
~/.fvwmrc ~/.fvwm2rc Archivos de configuración para fvwm y fvwm2 (el gestor básico de X Window).
~/.hushlogin Eche un vistazo al "manual del inicio de sesión". Causa un inicio de sesión "silencioso" (sin aviso por correo, última información de inicio de sesión o MOD).
~/.mail.rc Archivo init del usuario para el programa del correo.
~/.ncftp/ Directorio para el programa ncftp; contiene marcadores de página, registro, macros, preferencias y seguimiento. Vea el manual del ncftp. El propósito del ncftp es brindar una interfaz potente y flexible para el Protocolo de Internet estándar para la Transferencia de Archivos. Tiene el propósito de reemplazar el programa ftp de reserva que viene con el sistema.
~/.profile Eche un vistazo al "manual de bash". bash lo trata como ~/.bash_profile si él y ~/.bash_login no existen, y también lo utilizan otros shells heredados de Bourn.
~/.pinerc Configuración de Pine
~/.muttrc Configuración de Mutt
~/.exrc La configuración de vi puede ser controlada a través de este archivo.
Ejemplo: set ai sm ruler
Cuando se escribe la anterior línea en este archivo, se hace que vi establezca la sangría automática, haciendo coincidir los paréntesis y mostrando el número de línea y las opciones de filas-columnas.
~/.vimrc Archivo de configuración predeterminado de "Vim". Igual que .exrc.
~/.gtkrc Kit de Herramientas de GNOME.
~/.kderc Configuración de KDE.
~/.netrc Nombres y contraseñas predeterminados para el inicio de sesión del ftp.
~/.rhosts Utilizado por r-tools: rsh, rlogin, etc. Seguridad muy débil ya que es fácil suplantar al host.
  1. Debe ser propiedad del usuario (propietario de ~/) o superusuario.
  2. Hace una lista con los hosts desde los que los usuarios pueden acceder a esta cuenta.
  3. Ignorado si es un vínculo simbólico.
~/.rpmrc Vea "manual del rpm". Leído por el rpm si /etc/rpmrc no está presente.
~/.signature El mensaje de texto que se anexará automáticamente a los correos que se envíen desde esta cuenta.
~/.twmrc Archivo de configuración para twm ( El Gestor de Ventanas).
~/.xinitrc Leído por X al inicializar (y no por el script xinit). Principalmente inicia algunos programas.
Ejemplo: exec /usr/sbin/startkde
Si la línea anterior está presente en este archivo, el KDE Window Manager se inicia cuando se envíe el comando startx desde esta cuenta.
~/.xmodmaprc Este archivo se pasa al programa xmodmap, y se podría llamar cualquier cosa (~/.Xmodmap y ~/.keymap.km, por ejemplo).
~/.xserverrc Ejecutado por xinit como el servidor X si puede encontrar a X para ejecutarlo.
~/News/Sent-Message-IDs Archivo predeterminado del histórico del correo para gnus.
~/.Xauthority Leído y escrito por el programa xdm para manejar la autorización. Vea las páginas del manual de X, xdm y xauth.
~/.Xdefaults,
~/.Xdefaults-hostname
Leído por las aplicaciones de X durante la inicialización en el nombre del host. Si no se puede encontrar el archivo -hostname, se busca .Xdefaults.
~/.Xmodmap Apunta a .xmodmaprc; Red Hat tenía (tiene) a .xinitrc con ese nombre.
~/.Xresources Usualmente el nombre del archivo pasado a xrdb para cargar la base de datos de recursos de X, para evitar que las aplicaciones tengan que leer un archivo .Xdefaults largo. (~/.Xres ha sido utilizado por algunos.)

~/mbox

Correo antiguo del usuario.

Recursos para Descargar

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=1062770
ArticleTitle=Entender los archivos de configuración de Linux
publish-date=12012001