Instructivo

Almacenamiento de Conocimiento

Herramientas de usuario

Herramientas del sitio


linux:conociendo_el_funcionamiento_de_linux

3. Conociendo el funcionamiento de Linux

Objetivos

Adquirir conocimientos sobre el sistema de inicio, los permisos, los servicios y el manejo de dispositivos del sistema operativo, así como aprender a encontrar la información necesaria para consultar.

3.1. [ ] Estructura de directorios: concepto, árbol de directorios, contenido, proc, dev, sys

La estructura del árbol de directorios es muy parecida de una distribución a otra, aunque puede variar sensiblemente. La raíz del sistema operativo es representada simplemente por la barra común “/”.

La mayoría de las distribuciones adhieren hoy en día al Filesystem Hierarchy Standard (FHS), que define cómo debe estar compuesto el árbol de directorios, y qué cosa debe ir en cada uno. Así, en un Linux moderno, los directorios de primer nivel y su contenido típicamente son:

  • bin: comandos binarios esenciales
  • boot: archivos estáticos necesarios para el arranque, incluyendo el kernel
  • dev: archivos de dispositivos
  • etc: configuración del sistema operativo y sus sistemas y servicios
  • home: directorios de inicio de cada usuario
  • lib: librerías esenciales del sistemas y módulos del kernel
  • media: puntos de montaje para medios removibles
  • mnt: puntos de montaje estáticos
  • opt: paquetes de software agregados al sistema
  • proc: sistema de archivos virtual de información del kernel y procesos
  • root: directorio de inicio del usuario root
  • sbin: comandos esenciales del sistema
  • selinux: sistema de archivos virtual de SELinux
  • srv: datos para servicios provistos por el sistema
  • sys: sistema de archivos virtual de información del sistema
  • tmp: archivos temporales
  • usr: archivos estáticos binarios ejecutables y librerías, manuales, gráficos, ejemplos, de sólo lectura y compartidos para todos los usuarios
  • var: almacenamiento de datos variables

3.2. [ ] Proceso de arranque: init, runlevels, comandos: service, chkconfig

Un aspecto muy importante de los Linux es el sistema de arranque, el cual es simple, configurable, transparente y muy poderoso. El administrador puede personalizar y ajustar cada parte de este proceso con completa seguridad de que las cosas funcionarán como lo desea.

De la misma manera, el proceso de apagado es configurable y adaptable a las necesidades de cada caso.

  1. La BIOS revisa el sistema y lanza la primera fase del manejador de inicio que reside en el MBR
  2. El manejador de inicio lanza la segunda fase desde el directorio /boot
  3. Esta fase es la encargada de cargar el kernel en memoria, lo que cargará los módulos necesarios y montará la partición raíz en modo de sólo lectura
  4. El kernel transfiere el proceso de inicio al programa /sbin/init
  5. Éste cargará todos los servicios y herramientas de nivel de usuario, y montará las particiones listadas en /etc/fstab
  6. Luego de finalizar estos procesos, se presentará al usuario una pantalla de ingreso

Linux provee varios runlevels, del 0 al 6. Cada uno se utiliza para iniciar o detener servicios de manera automática. Así:

  • runlevel 0: halt. Es el runlevel que se inicia cuando se desea apagar el equipo
  • runlevel 1: single. En este nivel se realizan tareas administrativas especiales, ya que ningún proceso estará corriendo
  • runlevel 2: por defecto en Debian y derivados, tanto para modo de texto como modo gráfico
  • runlevel 3: por defecto en RedHat y derivados, para modo texto
  • runlevel 4: no se usa
  • runlevel 5: por defecto en RedHat y derivados, para modo gráfico
  • runlevel 6: restart. Se cambia a este runlevel cuando se desea reiniciar el equipo

Para controlar los diferentes runlevels, se utilizan los comandos shutdown y telinit, a saber:

  • shutdown: para apagar o reiniciar el equipo
    • Reiniciar: shutdown -r now
    • Apagar: shutdown -h now
  • telinit: para cambiar de runlevel. P. ej. para cambiar a runlevel 1: telinit 1

Los servicios del sistema pueden iniciarse, reiniciarse y detenerse con el comando service. La configuración respecto a qué servicio se iniciará o detendrá automáticamente en los diferentes runlevels, se realiza con el comando chkconfig.

Por ejemplo, para reiniciar el servidor SSH:

/sbin/service sshd restart

Para revisar en qué runlevels se iniciará este demonio:

chkconfig --list sshd

Configurar su inicio en los runlevels 2, 3, 4 y 5:

chkconfig --level 2345 sshd on

Para configurar que no inicie en dichos runlevels:

chkconfig --level 2345 sshd off

3.3. [ ] Permisos, usuarios y grupos

El sistema de permisos de Linux es sumamente simple, práctico, eficiente y seguro. Se basa en permisos de archivos, y usuarios y grupos propietarios de los mismos.

Para cada entrada de un sistema de archivos, sea archivo o directorio, hay un indicador de tipo, y tres grupos de permisos:

dr-xr-xr-x. 2 root root 4096 may 11 20:45 /bin
  • El primer carácter, d en este caso, indica que es un directorio
  • Los tres siguientes r-x, son los permisos para el propietario
  • Los tres del medio r-x, son los permisos para el grupo propietario
  • Los últimos tres r-x, son los permisos para “otros”, es decir, para aquellos usuarios que no son el propietario ni pertenecen al grupo propietario
  • El número 2 que sigue indica, si es un directorio la cantidad de subdirectorios que contiene, incluyendo . y ..; si es un archivo, indica la cantidad de hardlinks existentes para el mismo
  • La primer palabra root es el propietario, en este caso el usuario root
  • La segunda palabra root es el grupo propietario
  • El valor numérico, 4096 en este caso, es el número de bloques ocupados. Si fuese un archivo, indica el tamaño del mismo
  • Luego viene la fecha y hora de modificación

3.4. [ ] Montando y desmontando sistemas de archivos

Montar un sistema de archivos significa hacer visibles al operador los archivos contenidos en él. Esos archivos pueden estar en un dispositivo de almacenamiento local, extraíble o no, o ser exportados por un servidor remoto, entre otras posibilidades.

Para montarlo, se necesita un directorio vacío creado al efecto, que se denomina punto de montaje. Estos directorios habitualmente son creados dentro del directorio /mnt.

Por ejemplo, para montar un pendrive:

mkdir /mnt/pendrive

Insertar luego el pendrive en un puerto USB, y montarlo:

mount /dev/sdb1 /mnt/pendrive

Donde sdb1 es el nodo asignado al mismo por el kernel, cosa que se puede ver en el archivo /var/log/messages, o bien ejecutando un cat /proc/partitions

3.5. [ ] Servidores: definición, demonios, posibilidades, iniciando y deteniendo demonios

Además de al equipo físico, se llama servidor a un proceso que brinda servicios de diferente índole. También se lo denomina demonio.

Ejemplos son los servicios Apache, Samba, NFS, Bind9, DHCP, y muchos otros. Así, el servicio HTTP provisto por Apache, es brindado por el demonio httpd; el servicio DNS ofrecido por Bind9, es brindado por el demonio named.

El objetivo del servidor físico es centralizar la información, así como la configuración, de los servicios que son provistos a las estaciones cliente.

En la mayoría de los Linuxes modernos, los servicios se controlan con el comando service.

Para ver el estado de un servicio:

service sshd status

Para detenerlo e iniciarlo:

service sshd stop
service sshd start

3.6. [ ] Servicios más comunes en un servidor: Samba, NFS, httpd, DHCP, proxy, firewall, SSH, mail, impresión, DNS, FTP, virtualización

Entre muchos otros servicios importantes hoy día, algunos comunes, prácticos y confiables son:

  • Samba: provee compartición de archivos e impresoras, principalmente para estaciones Windows. Puede simular un Primary Domain Controller completo en la versión 4, mientras que en la 3 provee la mayoría de las funciones, pero es más limitado
  • NFS: provee compartición de archivos para clientes Linux y Unix
  • httpd: provee como su nombre lo indica protocolo HTTP/HTTPS. Los más usados son Apache y Nginx
  • DHCP: ofrece configuración dinámica de hosts. En conjunto con un DNS, permite configurar una red por completo con asignación dinámica de IPs a nombres de host
  • proxy: permite almacenar localmente archivos descargados de Internet, de manera que al ser accedidos nuevamente pasen desde el servidor directamente a la estación cliente, sin tener que ser descargados nuevamente. Además, provee permisos de acceso a Internet, así como otros servicios. El más usado es Squid
  • firewall: controla el tráfico de red de entrada y salida, bloqueando accesos no permitidos y permitiendo la salida o entrada de conexiones según reglas preestablecidas, entre otras posiblidades
  • SSH: brinda acceso encriptado a servidores, proveyendo al mismo tiempo una gran funcionalidad relacionada a la administración remota de los mismos
  • mail: ofrece administración de correo electrónico, ruteo de entrada y salida, permisos, almacenamiento, filtro de spam y virus, entre otros servicios. Como SMTP puede mencionarse a Postfix y Exim, y como demonios POP3/IMAP a Cyrus, Courier o Dovecot.
  • DNS: resuelve nombres de host en su o sus respectivas direcciones IP, y viceversa. En conjunto con DHCP resulta muy útil para administrar intranets complejas
  • FTP: provee transferencia simple de archivos
  • virtualización: es la capacidad de emular por software algún tipo de hardware. Permite aprovechar realmente un servidor físico, instalando máquinas virtuales, cada una con diferentes sistemas operativos y variado software. Algunos sistemas de virtualización son KVM, Xen y vserver.

3.7. [ ] Shell : Introduccion, Filosofia de trabajo, multitarea Basica

Se llama shell, terminal, intérprete de comandos o línea de comandos a una interfaz de texto para interactuar con el sistema operativo. El usuario dirige el sistema operativo mediante el envío de comandos como texto a un intérprete.El intérprete también permite escribir scripts que constan de uno de o más de esos comandos, y que se ejecutan llamándolos por su nombre. Los shells más comunes son Bourne Again Shell (Bash) y C Shell (Csh). Hay muchos otros, cada uno con sus características particulares.

Estas interfaces han sido desarrolladas desde fines de los años 60 y principios de los 70 en forma estable, conservada, y con claros objetivos de confiabilidad y seguridad, a la vez que explotan toda la potencia del sistema subyacente y sus diferentes características: kernel, sistema de archivos, multitarea, multiusuario, etc.

El principio básico de la línea de comandos es lograr la interacción con el sistema operativo rápida y eficazmente, consumiendo lo menos posible de recursos, concentrándose en la resolución de los temas de manera estable, confiable y segura. Permite resolver cualquier situación de manera local o remota sabiendo con absoluta certeza cómo va a responder el sistema operativo, y cómo va a ser el resultado de la interacción.

Algunas características básicas y ejemplos:

  • Multitarea: permite ejecutar tareas simultáneamente en una sola línea y mientras se ejecutan seguir trabajando (&)
    cd /usr ; tar czf /tmp/bin.tar.gz ./bin & tar czf /tmp/lib.tar.gz ./lib &
  • Alias: creación de comandos personalizados mediante el uso de aliases (comando alias)
    alias listado="ls -la --color=auto"
  • Redireccionamiento de entrada/salida: en Linux hay siempre tres archivos abiertos: stdin (el teclado), stdout (la pantalla), y stderr (mensajes de error enviados a la pantalla)
    • Redireccionar stdout a un archivo:
      ps axu > psaux.txt
    • Redireccionar stderr a un archivo:
      grep lalala * 2> grep-errores.txt
    • Redireccionar stderr y stdout a un archivo:
      grep lalala * &> grep-salidayerrores.txt
  • Tuberías (pipes): se puede utilizar la salida estándar de un comando como la entrada de otro (|)
    ps aux | grep syslog

3.8. [ ] Documentación: dónde, cómo, qué, páginas man, ayuda de comandos

La documentación disponible sobre Linux y sus comandos es amplísima en la mayoría de los casos. Se recomienda acceder a la documentación en los sitios oficiales de cada proyecto.

Por ejemplo, en el caso de la última versión de Apache Tomcat la misma está disponible en http://tomcat.apache.org/tomcat-7.0-doc/

Asimismo, la documentación de la última versión de MySQL se encuentra en http://dev.mysql.com/doc/refman/5.6/en/index.html

Hay muchísima documentación, alguna de excelente calidad, creada y mantenida por terceros. En estos casos se puede buscar como referencia de otros, y ver los comentarios respecto a la seriedad del enlace.

Por ejemplo la Advanced Bash-Scripting Guide es la referencia obligada de programación de Bash. Otro ejemplo son los tutoriales escritos por Falko Timme y varios otros autores en http://www.howtoforge.com/

Los comandos suelen tener una ayuda en línea, accesible generalmente con el modificador –help, -help o -h. Por ejemplo, para visualizar la ayuda básica del comando grep:

grep --help

Además, en el propio sistema operativo ya instalado, se dispone de las páginas man. Éstos son manuales de cada comando, archivo de configuración, funciones, llamadas y otros, disponibles con el comando man.

Ejemplos:

  • Uso del comando grep:
    man grep
  • Archivo de configuración yum.conf
    man yum.conf

Existe otro manual, interactivo y generalmente más desarrollado, que es denominado manual Texinfo o páginas info. Por ejemplo, para acceder a un extenso manual del intérprete Bash:

info bash

3.9. [ ] Dispositivos: reconocimiento, módulos y parámetros, cargar y descargar módulos. Problemas de permisos. Comandos modprobe, insmod, rmmod, lsmod

Se denomina “módulo” o “driver” a un archivo binario que es cargado junto al kernel, y que permite el acceso a un dispositivo, sistema de archivo o nueva funcionalidad, entre otros.

Los comandos para realizar estas tareas son:

  • modprobe: carga un módulo, realizando las tareas necesarias para que funcione adecuadamente, por ejemplo, cargando otro que es requerido. Ej.: modprobe snd_intel8x0
  • insmod: instala un módulo, especificando si es necesario opciones para el mismo. Como no resuelve dependencias, generalmente se lo usa en situaciones específicas
  • lsmod: lista los módulos cargados con el kernel

La configuración de los módulos, así como blacklisting y otras tareas, se realiza con los archivos de configuración existentes dentro de /etc/modprobe.d/

Bibliografía

linux/conociendo_el_funcionamiento_de_linux.txt · Última modificación: 2017/03/07 11:32 (editor externo)