¡Esta es una revisión vieja del documento!
El propósito de este curso es brindar los conocimientos mínimos de Linux, tanto técnicos como informativos, que permitan al alumno administrar básicamente un sistema GNU/Linux. Incluye conocimientos sobre distribuciones basadas en Debian, en CentOS y algunas otras, así como ideas y conceptos de BSD Unix. Se incluirá también información sobre servidores, demonios y bases de datos, así como nociones de seguridad.
El objetivo de esta página wiki es suministrar un resumen de lo que se enseñará durante la cursada, en especial comandos y consejos prácticos.
Adquirir conceptos básicos y terminología necesaria para el uso diario del sistema operativo.
Se llama “Linux” específicamente al kernel de un sistema operativo. Este kernel fue creado por Linus Torvalds en 1991 y liberado como software Open Source (Código Abierto) bajo licencia GNU GPL (GNU Privacy Licence) de manera que cualquiera pueda mejorarlo, extenderlo y modificarlo para sus propias necesidades. La condición de esta licencia es que se publiquen nuevamente esas fuentes modificadas, junto con una copia de la propia licencia.
Por extensión, se llama "GNU/Linux" o "Linux" a secas al sistema operativo, que consta de un conjunto de herramientas, servicios y archivos de configuración, y que permite aprovechar la potencia y confiabilidad de ese kernel. De ahora en más, se utilizará cualquiera de ambos términos para referirse al sistema operativo en sí, a menos que se indique lo contrario.
GNU/Linux, como sistema operativo, no es de ninguna manera un Unix. Es simplemente un sistema operativo “como Unix” (Unix-like). Es decir, toma conceptos, ideas y técnicas de Unix, agregando muchas cosas nuevas, para obtener un producto mucho más versátil, extensible y práctico.
Linux ha sido escrito desde las bases para ser multiusuario, proveer poderosas capacidades multitarea, y una versatilidad ilimitada.
Multiusuario: significa que cada proceso puede ser ejecutado con un usuario diferente, proveyendo así limitaciones básicas a cada uno. Esta capacidad se usa extensivamente y se recomienda aprovecharla. Por ejemplo, cada servicio suele ser ejecutado con su propio usuario, limitando así en caso de un ataque a los permisos asignados a dicho usuario.
Multitarea: es la capacidad de ejecutar múltiples tareas sin que interfieran unas con otras. En el sistema en el cual está siendo escrito este tutorial en este momento, se ejecutan más de 160 procesos y unos 380 threads; esto incluye servicios como DNS, DHCP, proxy, y servidor HTTP, así como máquinas virtuales. La memoria usada es de unos 3,7GB incluyendo las dos máquinas virtuales.
Versatilidad: es la posibilidad de ser utilizado en distintos ambientes, para enorme cantidad de fines distintos, sobre distintas plataformas e infinitos servicios. Desde celulares y minicomputadoras de todo tipo, hasta supercomputadoras con miles de procesadores y almacenamiento de miles de TB; desde centro de datos para servicios críticos de empresas, hasta computadoras de escritorio y multimedia.
Monoraíz: como los Unix, Linux está basado en el concepto de “raíz única”, es decir que todos los directorios penden de una sola raíz base y no hay letras de unidades. Los dispositivos de almacenamiento son accedidos luego de seguir un procedimiento que se denomina “montar” y que deja disponibles al usuario los archivos contenidos en ellos en una carpeta del árbol de directorios.
Las particiones primarias, extendidas y lógicas es el sistema de particionamiento basado en DOS sobre el que está diseñado todo el hardware x86 que se usa actualmente. Se llama MBR (Master Boot Record), es de 32 bits y está limitado a unidades de almacenamiento de 2TB. Por ello se ideó un nuevo sistema denominado GPT (GUID Partition Table) que es de 64 bits y utiliza identificadores globales únicos (GUID, Globally Unique IDentifiers) para guardar la información de las particiones.
GPT permite hasta 128 particiones, las que son todas del mismo nivel, es decir no existe diferencias entre ellas como en MBR.
Bash: es uno de los intérpretes de comandos más utilizados. Permite ejecutar comandos y desarrollar scripts para automatizar tareas. Posee una gran funcionalidad
boot manager: es el programa que inicia el sistema operativo. Se instala en el MBR y si hay varios sistemas operativos instalados en la misma computadora, permite iniciar cada uno por separado
Manejador de ventanas: en inglés “Window Manager”. Es una capa de software sobre el sistema X Window, y que provee la funcionalidad de ventanas para mover, minimizar, maximizar, apilar, etc. las aplicaciones. Las aplicaciones y programas gráficos corren dentro de las ventanas provistas por el manejador de ventanas
MBR (Master Boot Record): es una pequeña porción al inicio de un disco rígido, que es ejecutada por la BIOS al encender una computadora
montar: acción de hacer visibles para el usuario los archivos de un sistema de archivos, conectando éste a una carpeta del árbol de directorios
particionar: acción de dividir una unidad de almacenamiento en particiones, que luego pueden ser usadas para separar las distintas porciones del sistema operativo
raíz: en inglés también “root”. Es el directorio principal, de más alto nivel, de un sistema de archivos Unix. De él penden el resto de las carpetas del sistema operativo
root: usuario administrador del sistema. También se llama “superuser”
shell: también denominado “consola” o “terminal”. Es una interfaz de texto para interactuar con el sistema operativo, que permite la ejecución de comandos
sistemas de archivos: en inglés “filesystems”. Son los diferentes sistemas de organización de archivos en unidades de almacenamiento, de los cuales Linux puede utilizar una gran variedad, cada uno con sus ventajas y desventajas: ext4, ext3, NTFS, FAT32, vfat, BtrFS, ReiserFS, XFS, GFS2, JFS, etc.
X Window System: llamado simplemente “las X” o “sistema X”, es el motor gráfico que provee las primitivas de acceso al hardware de vídeo, y que permite interactuar de manera gráfica con el sistema operativo. Sobre éste se ejecutan manejadores de ventanas y aplicaciones gráficas
Es un sistema operativo extremadamente versátil, por lo que puede usarse prácticamente en cualquier ámbito y para resolver el tema que sea. Algunos ejemplos a continuación:
Se denomina “distribución”, o “distro” a un conjunto de herramientas de software, más kernel Linux, empaquetados de alguna manera por una institución o empresa. La mayoría de ese software suele ser Open Source. En muchos casos, las distribuciones son gratuitas. No así en otros.
Ejemplos son:
Incorporar las técnicas y conocimientos necesarios para instalar exitosamente el sistema operativo, y dejarlo funcionando adecuadamente.
Es altamente recomendable conocer el hardware sobre el que se va a instalar el sistema operativo. Especialmente antes de la compra del mismo. La mayor parte del hardware existente hoy en día funciona correctamente con Linux, pero en ocasiones pueden ocurrir inconvenientes, incompatibilidades o directamente no funcionar.
Las fuentes de obtención de información del hardware son variadas, a saber: sitio del fabricante, BIOS, manuales, observación visual, software de información.
Una manera fácil y práctica de revisar el hardware es iniciar el sistema con una distribución de rescate como System Rescue CD y luego ejecutar las herramientas básicas que provee Linux:
En general no se debe tener cuidados especiales al instalar Linux. Sí es importante tomar recaudos en caso de que se lo esté instalando en un disco con otros sistemas operativos.
En este caso, es muy importante realizar una copia de resguardo si hay datos importantes en el sistema operativo ya instalado, dado que si ocurre cualquier inconveniente pueden perderse.
Respecto al hardware, si el sistema operativo se usa en forma normal, no hay razón por la que pueda dañarse.
Si se está realizando experimentación, Linux provee una gran cantidad de herramientas de acceso a recursos de bajo nivel. Si son mal utilizadas éstas sí pueden dañar el hardware en forma irreversible.
Debian puede ser instalado de varias maneras diferentes, cada una con sus ventajas y desventajas.
Primero, se debe elegir un medio de instalación, que puede ser un CDROM o un DVD. En el segundo caso, los paquetes disponibles son más abundantes que en el primero. Además, puede instalarse desde un CD mínimo, o desde la red, utilizando un CD netinstall.
En cualquier caso, luego se pueden agregar más paquetes, de todos los disponibles para Debian, así como instalar software extra de todo tipo y de diversas fuentes.
La instalación recomendada es la de texto, simplemente porque es la forma más rápida y simple de hacerlo, y funciona siempre sin inconvenientes. La instalación gráfica es casi exactamente igual, con la misma funcionalidad, pero depende de que todos los componentes de hardware involucrados funcionen correctamente con los drivers existentes en el medio de instalación.
También se puede instalar el sistema operativo de manera básica en una partición mínima, de unos 4GB, y luego particionar el espacio libre, y configurar lo necesario.
El esquema de particionamiento recomendado es altamente variable dependiendo de las necesidades y del destino que se le de al sistema.
Debian recomienda un mínimo de 1GB en la partición raíz si no se utilizará la interfaz gráfica, y 5GB si se desea instalarla.
Para una estación de trabajo, con un disco moderno de 500GB o más, se puede instalar todo en una sola partición para la raíz, y un espacio de swapping. Por ejemplo:
Para un servidor básico, puede recomendarse algo como:
CentOS puede ser instalado de varias maneras diferentes, cada una con sus ventajas y desventajas.
Primero, se debe elegir un medio de instalación, que puede ser un CDROM o un DVD. En el segundo caso, los paquetes disponibles son más abundantes que en el primero. Además, puede instalarse desde un CD mínimo, o desde la red, utilizando un CD netinstall.
En cualquier caso, luego se pueden agregar más paquetes, de todos los disponibles para CentOS, así como instalar software extra de todo tipo y de diversas fuentes.
La instalación recomendada es la gráfica, dado que la de texto tiene escasa funcionalidad. Por ejemplo, no permite realizar un particionamiento adecuado.
De todas maneras, si se desea realizar un particionamiento personalizado avanzado, se debe utilizar primero el comando fdisk o el comando parted, y luego de tener el esquema de particionamiento deseado, lanzar la instalación. De esta manera, el instalador permitirá montar cada partición en su punto de montaje, y así finalizar la instalación tal como se necesita.
También se puede instalar el sistema operativo de manera básica en una partición mínima, de unos 5GB, y luego particionar el espacio libre, y configurar lo necesario.
El esquema de particionamiento recomendado es altamente variable dependiendo de las necesidades y del destino que se le de al sistema.
CentOS recomienda un mínimo de 5GB en la partición raíz.
Para una estación de trabajo, con un disco moderno de 500GB o más, se puede instalar todo en una sola partición para la raíz, y un espacio de swapping. Por ejemplo:
Para un servidor básico, puede recomendarse algo como:
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.
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:
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.
Linux provee varios runlevels, del 0 al 6. Cada uno se utiliza para iniciar o detener servicios de manera automática. Así:
Para controlar los diferentes runlevels, se utilizan los comandos shutdown y telinit, a saber:
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
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
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
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
Entre muchos otros servicios importantes hoy día, algunos comunes, prácticos y confiables son: