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 Rocky 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 (manejador de arranque): 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, un DVD o un pendrive. Si se utiliza un DVD o pendrive, los paquetes disponibles son más abundantes que en un CDROM. 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:
Rocky 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 Rocky, 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.
Rocky 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 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.
Hace unos años atrás, la mayoría de las distribuciones disponían de un sistema de inicio llamado SysVInit, que estaba basado en scripts Bash en su mayoría, para controlar cómo iniciaba el sistema operativo. Hoy eso fue reemplazado por systemd (por System Daemon), que agrega una capa de control de aplicaciones, procesos y usuarios, sobre el propio kernel, y que aprovecha extensivamente los cgroups (control groups) disponibles en el kernel desde hace ya bastante tiempo.
Debido a estos cambios, de los más importantes que han ocurrido en GNU/Linux en los últimos años, se hablará aquí de ambos sistemas de inicio, y se los comparará en cierta medida. El objetivo es que el alumno, si debe administrar sistemas viejos, tenga una idea de ambos, pueda compararlos y aprovecharlos.
El proceso de inicio de un Linux puede resumirse de la siguiente manera:
Antiguamente Linux proveía lo que se llamaba runlevels, o niveles de ejecución, del 0 al 6, para configurar qué servicios y programas iniciaban o se detenían según el momento de ejecución del sistema. Esto es algo ya obsoleto, y systemd provee lo que se denomina targets. Los target pueden ser activados en paralelo, a diferencia de los runlevels que podían ocurrir uno por vez.
Así entonces, tenemos varios targets que se corresponden en cierta medida a los antiguos runlevels:
Target | Runlevel | Descripción | Comentarios |
---|---|---|---|
poweroff.target | 0 | Es el target que se inicia cuando se desea apagar el equipo | Es equivalente a: shutdown -h now |
rescue.target | 1, s, single | En este target se realizan tareas administrativas especiales, ya que ningún servicio estará corriendo | |
multi-user.target | 2, 3, 4 | Multiusuario, no gráfico. Los usuarios normalmente pueden acceder por múltiples consolas o a través de la red | |
graphical.target | 5 | Mulitusuario gráfico. Como el target anterior, pero con consola gráfica | |
reboot.target | 6 | Reinicio del sistema | Es equivalente a: shutdown -r now |
emergency.target | emergency | Consola para emergencias |
En systemd, se utiliza el comando systemctl para apagar o reiniciar el sistema, para iniciar, detener o reiniciar servicios y demonios, o para ver su estado. En los ejemplos que verán, pueden obviar la extensión como .target o .service, pues son optativas.
Para apagar el equipo:
systemctl poweroff.target
Para reiniciar el equipo:
systemctl reboot.target
Para conocer cuál es el target por default del sistema, que puede variar según el uso que se le dé al equipo:
systemctl get-default
Cambiar el target a emergency para realizar tareas de mantenimiento:
systemctl isolate emergency.target
Luego de las tareas de mantenimiento, para volver al estado por default sin reiniciar el equipo:
systemctl default.target
Detener el demonio SSH:
systemctl stop ssh.service
Iniciar el demonio SSH:
systemctl start ssh.service
Reiniciar el demonio SSH:
systemctl restart ssh.service
Ver el estado de todos los servicios:
systemctl status
Ver el estado del servicio MySQL:
systemctl status mysql.service
Ver qué unidades han fallado al iniciar:
systemctl --failed
Habilitar un servicio, deshabilitarlo o revisar su estado:
systemctl enable postgresql.service systemctl disable postgresql.service systemctl status postgresql.service
Para controlar los diferentes runlevels, en SysV 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
Nota: Estos comandos aún funcionan en las distribuciones modernas con systemd, pero siempre llaman a systemctl, y se debería dejar de usarlos
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. Los demonios son ejecutables que pueden tomar distintos nombres según la distribución, pero que generalmente es el mismo código de una a otra.
Ejemplos son los servicios Apache, Samba, NFS, Bind9, DHCP, y muchos otros. Así, el servicio HTTP provisto por Apache, es brindado por el demonio llamado httpd en Red Hat y derivados, mientras que en Debian y derivados se llama apache2; el servicio DNS ofrecido por Bind9, es brindado por el demonio named en las distribuciones derivadas de Red Hat, y bind9 en las derivadas de Debian.
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 systemctl provisto por systemd.
Para ver el estado del servicio SSH:
systemctl status ssh
Para detenerlo e iniciarlo:
systemctl stop ssh systemctl start ssh
Si se desea deshabilitar o habilitar un servicio o demonio Apache al inicio del sistema, en Debian:
systemctl disable apache2 systemctl enable apache2
Es importante recordar que el servicio, el nombre del demonio, puede variar de una distribución a otra.
Entre muchos otros servicios importantes hoy día, algunos comunes, prácticos y confiables son:
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:
cd /usr ; tar czf /tmp/bin.tar.gz ./bin & tar czf /tmp/lib.tar.gz ./lib &
alias listado="ls -la --color=auto"
ps axu > psaux.txt
grep lalala * 2> grep-errores.txt
grep lalala * &> grep-salidayerrores.txt
ps aux | grep syslog
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:
man grep
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
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:
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/
Entender cómo es el manejo de la interfaz gráfica, aprender a configurarla y a aprovecharla para el trabajo diario.
El sistema de ventanas X (X Window System, también informalmente llamado X-Windows) provee el framework básico (primitivas) para un entorno gráfico, como el trazado y manejo de dibujos sobre el dispositivo gráfico, drivers, aceleración, y la interacción con el teclado y ratón y otros dispositivos de entrada. X no provee la interfaz de usuario, la que es manejada por otros programas individuales. Por lo tanto, el estilo visual de la misma varía radicalmente según los diferentes proyectos que proveen un entorno de ventanas (desktop environment).
X fue diseñado en el Massachusetts Institute of Technology (MIT) como un sistema cliente-servidor para interactuar con interfaces remotas, proveyendo transparencia de red: la máquina donde un programa (la aplicación cliente) se ejecuta puede ser diferente a la máquina local del usuario (servidor de display).
KDE es un entorno gráfico de escritorio. Un entorno de escritorio es un conjunto integrado de aplicaciones gráficas que corre bajo diversas plataformas, proveyendo toda clase de utilitarios y funciones para el trabajo diario sobre una computadora.
Otros desktop environments son: Cinnamon, Enlightenment, GNOME, LXDE, Mate y XFCE.
KDE provee la interfaz gráfica, la apariencia de la misma, las ventanas, incluyendo iconos, sonidos y otros elementos, para la interacción del usuario con la computadora.
Tiene una enorme funcionalidad, incluso mucho más amplia que otros entornos gráficos para otros sistemas operativos, que incluye la posibilidad de adaptar los elementos a los gustos del usuario casi sin límites. Reubicar botones de ventanas, la interacción con las ventanas, los efectos, la apariencia, diferentes fondos de escritorio para distintas situaciones, conectividad con otros equipos simple y segura, toda clase de facilidades para multitarea avanzada (como múltiples escritorios y actividades), son características fácilmente aprovechables e invaluables en el trabajo diario.
Algunos nombres y componentes, todos altamente configurables y personalizables:
Si se instala el metapaquete kde-full, se instalarán gran cantidad de aplicaciones para KDE de todo tipo: educación, gráficos, multimedia, juegos y otros. Aquí mencionamos algunas.
Incorporar las técnicas y conocimientos necesarios para utilizar y aprovechar la línea de comandos, así como conocer el manejo de los procesos y aprender a detectar problemas.
La línea de comandos o shell permite operar el sistema operativo en su totalidad sin perder tiempo, sobre conexiones lentas o defectuosas, con mínimo gasto de recursos y con la seguridad de que las operaciones funcionarán como es debido.
Entre muchísimas operaciones habituales se puede, desde ver el estado del sistema, su carga, el listado de procesos, copiar o listar archivos, hasta grabar DVDs, navegar la web, escanear documentos, imprimir o retocar imágenes.
Tan poderosa como confiable, se caracteriza por su rapidez y versatilidad. Cuenta con innumerables comandos y utilitarios, y es fácilmente adaptable, mejorable y ampliable.
El Bourne Again Shell es uno de los más difundidos intérpretes de comandos disponibles en entornos Linux. Se caracteriza por ser fácil de usar, posibilidad de editar las líneas y crear funciones, disponer de histórico de comandos, aliases, control de tareas, y aritmética de enteros entre otras características.
La edición de líneas se realiza utilizando las teclas estándares al efecto: teclas de cursores, backspace, delete, home, end.
Algunas combinaciones de teclas prácticas:
Los comandos disponibles son muchísimos. Los más comunes pueden ser:
El comando ps se utiliza para listar los procesos que se están ejecutando en el sistema. Brinda una instantánea de lo que ocurre con ellos en ese instante.
Ejecutado sin parámetros, muestra un listado de los procesos que dependen de la terminal actual:
ps
Para listar todos los procesos del sistema, con la información de qué usuario está ejecutando cada uno:
ps aux
Si se desea además elaborar un árbol de jerarquías de procesos:
ps auxf
El ps es un comando complejo, con gran cantidad de modificadores.
En la línea de comandos, se puede ejecutar procesos de manera que se pueda volver a tomar el control de la misma, y continuar trabajando. Para ello, se agrega un ampersand (&) al final de la línea, por ejemplo:
tar czf /tmp/lib.tar.gz /lib &
Para ver el listado de tareas en background:
jobs
Para volver una tarea a primer plano:
fg <tarea>
donde <tarea> es el número de la tarea que se desea controlar, indicado por el comando jobs.
Si se desea en cambio pasar a segundo plano (background) una tarea que está en primer plano, primero se debe pulsar la combinación de teclas C-z para enviar una señal STOP y luego ejecutar el comando bg:
bg <tarea>
donde <tarea> es el número devuelto al ponerlo en STOP.
El histórico de comandos se accede con las teclas de cursores hacia arriba y hacia abajo. Una vez encontrada la línea en cuestión, la misma se puede editar desplazando el cursor hacia la izquierda y la derecha utilizando las teclas al efecto. Las teclas de edición son las estándares: suprimir, retroceso, Ctrl + cursores izquierda y derecha.
Además, utilizando la combinación C-r se puede realizar una búsqueda hacia atrás en el histórico. La combinación C-s se emplea para la búsqueda hacia adelante; si esta combinación está asignada a XOFF, se debe activarlo (XON) pulsando C-q. Si se desea desactivar definitivamente XON/XOFF, agregar el comando stty -ixon en /etc/profile. Este comando desactiva el uso de XON/XOFF.
La funcionalidad de autocompletar se invoca pulsando la tecla Tab. Permite autocompletar comandos y rutas del sistema de archivos. Por ejemplo, para escribir el comando yumdownloader basta con tipear las cuatro primeras letras “yumd” y pulsar Tab.
Esta tecla también sirve como ayudamemoria. Si uno no recuerda cómo se escribe un comando, puede empezar tipeando algo, y luego pulsar dos veces seguidas Tab. Por ejemplo, si se tipea “yum” y se pulsa dos veces la tecla Tab, se visualizarán todos los comandos existentes que comiencen con esas tres letras.
De la misma manera se emplea con los directorios.
Los comandos principales de administración de archivos y directorios son los siguientes:
Por obvias razones, es muy importante que el sistema esté en hora. Lo correcto es sincronizar la hora del sistema mediante NTP.
El comando para ver la fecha y hora, así como para configurarla es date.
El huso horario se puede cambiar creando un enlace simbólico en /etc/localtime a la información de huso horario correspondiente, presente en /usr/share/zoneinfo, por ejemplo:
ln -sf /usr/share/zoneinfo/America/Argentina/Buenos_Aires /etc/localtime
Linux tiene un excelente sistema de logs o registros. En general son archivos de texto que se actualizan inmediatamente ante un evento. Se guardan en /var/log y se utilizan para identificar inconvenientes de todo tipo, desde errores de programas y servicios a fallas en hardware o ruteo de correo electrónico, así como para monitorear actividad normal como el envío de correo electrónico, faxes, spoolers de impresión, etc.
Ante cualquier falla en el sistema, se recomienda revisarlos a conciencia. El demonio encargado de guardarlos se llama rsyslogd en Rocky. Algunos servicios, como ejemplo MySQL, graban por sí mismos los registros, aunque suelen enviar algún dato a syslog también.
Para revisarlos, se puede usar algún visualizador como less. Para hacerlo en tiempo real, se puede utilizar la siguiente línea:
tail -F /var/log/messages
Algunos archivos de registro que se encuentran en /var/log en Rocky son:
Una herramienta práctica para visualizarlos es multitail. Por ejemplo, para visualizar los logs messages y secure simultáneamente:
multitail /var/log/secure /var/log/messages
Aprender lo mínimo necesario para escribir y ejecutar un script de shell.
Un script es básicamente un archivo de texto con comandos dentro. Estos comandos son ejecutados mediante un intérprete. En el caso de Linux, el más común es Bash.
Los scripts permiten automatizar tareas repetitivas, evitando el error humano, y ahorrando tiempo. Por ejemplo, si se necesita realizar una limpieza de archivos temporales una vez por mes, si se necesita un backup diario de los archivos de usuarios, revisar el estado de los servicios, el espacio en disco, y cualquier tarea que requiera ejecutar una serie de comandos.
Intérpretes de comandos hay muchos además de Bash. Entre ellos podemos nombrar Python, Perl, PHP, y Ruby.
Cada script debe comenzar con una línea específica, que indica qué programa debe usar el kernel para interpretarlo:
#!/bin/bash
Para ser ejecutado, el archivo de texto debe tener permisos de ejecución:
chmod a+x script
Primer script
#!/bin/bash # Variable alfanumerica CADENA="Este es un primer script" # Imprimir la variable por la pantalla echo $CADENA # Salida de error stderr cero exit 0
Segundo script
#!/bin/bash DIRE="/sbin" # Para cada elemento en $DIRE evaluar que tipo de archivo es for i in `ls $DIRE` do file $DIRE/$i done exit 0
Tercer script
#!/bin/bash # Si el numero de procesos httpd es mayor a cero significa que Apache esta ejecutandose APA=`ps ax | grep "httpd" | grep -v "grep" | wc -l` if [ $APA -gt 0 ] then echo "Apache esta corriendo" else echo "Apache esta detenido" fi exit 0
Conocer la forma en que Linux maneja los usuarios y cómo se los administra.
En un Linux instalado normalmente, los usuarios se almacenan en el archivo /etc/passwd, mientras que sus contraseñas en /etc/shadow.
Los comandos para agregar, eliminar y modificar usuarios son respectivamente: useradd, userdel y usermod.
useradd -c "Usuario para pruebas" -d /home/test test
Para cambiar la contraseña de un usuario, se emplea el comando passwd:
passwd usuario
El listado de grupos, así como los usuarios que son miembros de cada uno, se almacenan en /etc/group. Los comandos para agregar, eliminar y modificar grupos son, respectivamente: groupadd, groupdel, y groupmod.
Si se desea cambiar el propietario (owner) de un archivo o directorio, el comando a utilizar es chown:
chown test /ruta/al/archivo
Para cambiar el grupo al cual pertenece un archivo o directorio, el comando es chgrp:
chgrp grupo /ruta/al/archivo
Incorporar los conocimientos necesarios para poder preparar sistemas de archivos para el uso del sistema operativo.
El comando más común para particionar es fdisk. Para automatizar en scripts, se usa sfdisk. Otro utilitario, interactivo y más fácil de usar pero con menos posibilidades es cfdisk. En discos nuevos, con particiones GPT se debe usar gdisk o parted.
Por ejemplo, para ver un listado de las particiones de un disco:
fdisk -l /dev/sda
Para particionarlo, agregar, quitar o modificar particiones en modo interactivo:
fdisk /dev/sda
La ayuda del comando está disponible en el modo interactivo pulsando la tecla m.
Creadas las particiones, se les debe dar formato con el comando mkfs. Por ejemplo, para formatear una partición lógica con el sistema de archivos ext4:
mkfs -t ext4 /dev/sda5
En cambio, las particiones para intercambio (swap) deben formatearse con un comando al efecto, mkswap:
mkswap /dev/sda6
Una vez que una partición fue formateada, se la debe montar. Este proceso hace que los archivos queden disponibles al usuario para poder utilizarlos, sea modificarlos, borrarlos, crearlos, o trabajar en su administración copiándolos, moviéndolos, creando carpetas, etc.
Esto se realiza con el comando mount, indicándole al mismo la partición que se debe montar y el punto de montaje:
mount -t ext4 /dev/sda5 /mnt/archivos
La configuración de qué particiones montar al inicio del sistema se encuentra en el archivo /etc/fstab. El siguiente es un ejemplo del contenido de dicho archivo:
# <fs> <mountpoint> <type> <opts> <dump/pass> /dev/sda5 none swap sw 0 0 /dev/sda6 / reiserfs noatime,notail 0 1 /dev/cdrom /mnt/cdrom auto noauto,user 0 0
La información de qué particiones se encuentran montadas, y dónde, se observa en el archivo /etc/mtab. Además, esa misma información puede ser visualizada con el comando mount sin agregarle parámetros.
Cuando se desea conocer el espacio libre que existe en una partición montada, se utiliza el comando df (disk free), con el modificador -h que hace que la información sea adaptada a MB, GB o TB según corresponda:
srv07 ~ # df -h / S.ficheros Tamaño Usados Disp Uso% Montado en /dev/sda6 9,0G 5,2G 3,9G 58% /
En cambio, si se desea ver el espacio ocupado por un directorio, se utiliza el comando du, por ejemplo:
nb01 ~ # du -hs /usr 4,9G /usr
Si un sistema de archivos tiene inconvenientes lógicos, por ejemplo luego de un apagado incorrecto de un equipo, se utiliza el comando fsck en runlevel 1 para repararlo:
fsck /dev/sda5
Si en cambio, se desea comprobar si el disco contiene errores físicos (bad sectors, sectores dañados), se emplea el comando badblocks. Este comando no repara sectores dañados, sino simplemente informa cuáles son:
badblocks -sv /dev/sda2
Si el disco tiene daño físico, lo más recomendable es cambiarlo.
Para acceder al sistema SMART (Self-Monitoring, Analysis and Reporting Technology) disponible en los discos, se utiliza el comando smartctl. Este comando permite analizar el disco, su estado, marca, modelo, número de serie, así como realizar pruebas de funcionamiento. Más importante aún, permite predecir si un disco fallará próximamente, permitiendo así planificar su recambio.
La información básica del disco se muestra con:
smartctl -i /dev/sda
Para ver el estado del disco, cantidad de horas encendido, errores y muchos otros parámetros:
smartctl -a /dev/sda
Realizar un chequeo de disco, corto y largo respectivamente:
smartctl -t short /dev/sda smartctl -t long /dev/sda
Terminados las pruebas, se puede ver el resultado con:
smartctl -l selftest /dev/sda
Existiendo la sospecha de falla de un disco, habitualmente se realiza primero un chequeo corto (que dura unos 5 minutos), y si no hay errores, uno largo (que puede durar varias horas). Es importante esperar a que un chequeo iniciado termine; de otra manera, si se inicia uno nuevo, éste cancelará el anterior.
Incorporar los conocimientos necesarios para poder entender cómo funcionan y cómo se instalan redes bajo estos protocolos
El Protocolo de Control de Transmisión (TCP, Transmission Control Protocol) es uno de los principales componentes del protocolo de Internet (IP, Internet Protocol). El conjunto es a menudo llamado TCP/IP. TCP provee un método de envío de flujo de octetos confiable, ordenado y con comprobación de errores entre programas ejecutándose sobre computadoras conectadas a una red, sea local o pública. Reside en la capa de transporte del modelo OSI.
El Protocolo de Internet (IP, Internet Protocol) es el principal componente del conjunto de protocolos para envío de datagramas a través de redes interconectadas. Su función de ruteo permite internetworking y esencialmente establece Internet.
La versión que actualmente se utiliza en más del 96% de Internet es la 4, que ofrece direcciones de 32 bit. Data del año 1981. Para resolver el tema del agotamiento de las direcciones, entre otros, una nueva especificación fue desarrollada por la IETF. Fue llamada versión 6, y data del año 1998. Entre otras características, ofrece direcciones de 128 bit.
Ejemplo de dirección IPv4 (4 grupos de 8 bit cada uno): 192.0.2.235
Ejemplo de dirección IPv6 (8 grupos de 16 bit cada uno): 2001:0db8:0000:0000:0000:ff00:0042:8329
Hay varios tipos de redes, siendo la más común hoy en día la topología en estrella. Las capas del modelo OSI son las siguientes:
Clase | Rango | N° de Redes | N° de Host Por Red | Máscara de red | Broadcast ID |
A | 0.0.0.0 - 127.255.255.255 | 128 | 16 777 214 | 255.0.0.0 | x.255.255.255 |
B | 128.0.0.0 - 191.255.255.255 | 16 384 | 65 534 | 255.255.0.0 | x.x.255.255 |
C | 192.0.0.0 - 223.255.255.255 | 2 097 152 | 254 | 255.255.255.0 | x.x.x.255 |
D | 224.0.0.0 - 239.255.255.255 | histórico | |||
E | 240.0.0.0 - 255.255.255.255 | histórico |
Si bien a bajo nivel la conexión entre equipos se realiza utilizando direcciones IP, para simplificar el trabajo humano y no tener que recordar los números de direcciones, se utilizan nombres de host y un sistema de resolución de nombres en su correspondiente dirección IP: Domain Name Service (DNS).
Si los equipos son pocos, se puede utilizar también el archivo /etc/hosts.
La configuración de red en Debian se encuentra en el directorio /etc/network, y particularmente el archivo /etc/network/interfaces contiene la configuración de las interfaces existentes en el sistema.
El contenido de ese archivo, típicamente es algo similar a lo siguiente:
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.11.1 netmask 255.255.255.0 network 192.168.11.0 broadcast 192.168.11.255 dns-nameservers 192.168.11.11 192.168.11.12 dns-search axrglobal gateway 192.168.11.254
Si se configura la interfaz con DHCP, el archivo interfaces se reduce a:
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp
La configuración de red en Rocky se encuentra en el archivo /etc/sysconfig/network y en el directorio /etc/sysconfig/network-scripts/ dentro de varios archivos y scripts de configuración.
Los archivos más importantes allí dentro son ifcfg-lo y ifcfg-eth0. A continuación, un ejemplo de configuración de ifcfg-eth0 para utilizar una IP fija:
DEVICE=eth0 BOOTPROTO=none ONBOOT=yes NETMASK=255.255.255.0 IPADDR=172.16.23.1 USERCTL=no
Sin embargo, si se desea utilizar DHCP:
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
Varios comandos son utilizados para configurar la red en un Linux, o analizar qué es lo que está ocurriendo.
Por ejemplo, para configurar una interfaz de red manualmente con ifconfig:
ifconfig eth0 172.16.23.25 netmask 255.255.255.0 broadcast 172.16.23.255
Visualizar la configuración de todas las interfaces de red:
ifconfig
Ver la configuración de una interfaz de red en particular:
ifconfig eth0
Crear y configurar una interfaz de red virtual:
ifconfig eth0 add 192.168.10.25 netmask 255.255.255.0 broadcast 192.168.10.255
Configurar un default gateway con route:
route add default gw 192.168.10.1
Mostrar las rutas configuradas actualmente:
route -n
Visualizar con el comando netstat las conexiones existentes TCP, su estado, así como los procesos que las están utilizando:
netstat -pnat
Para ver las conexiones UDP existentes:
netstat -pnau
Conocer los utilitarios más comunes para resolver tareas desde la interfaz gráfica.
Obviamente existe una gran cantidad de visualizadores de imágenes para Linux. Uno muy práctico es Gwenview, incluido en KDE.
Con él se puede navegar una colección de fotos, crear presentaciones, retocarlas, convertir imágenes RAW, publicarlas en los distintos servicios públicos como Flicker, Facebook y otros, así como almacenarlas en la nube. Tiene muchas herramientas de retoque, así como de presentación.
GIMP (GNU Image Manipulation Program) es un editor de imágenes de mapas de bits. Posee gran cantidad de herramientas de retoque profesional, efectos, soporte para scripting, conversión, capas, y toda clase de tareas especializadas.
Scribus es un programa de desktop publishing diseñado para delinear, escribir y preparar archivos profesionales para equipos de impresión gráfica como periódicos, brochures, boletines, posters, libros, etc. Entre muchas otras funciones, puede crear archivos PDF interactivos y formularios.
Inkscape es un editor de gráficos vectoriales con soporte para formato estándar SVG. Permite crear y manipular objetos extensivamente, con multitud de efectos y funciones sobre ellos, operaciones sobre paths, renderizado anti-aliasing y funciones de edición de texto, entre otras.
Conocer una de las suites ofimáticas más empleadas en Linux.
Incorporar las técnicas y conocimientos necesarios para instalar y administrar impresoras en Linux.
El sistema de impresión que se utiliza en Linux hoy en día se llama CUPS (Common Unix Printing System), desarrollado por Apple para sus sistemas operativos basados en BSD Unix.
CUPS está pensado como un sistema cliente servidor, y utiliza el protocolo IPP (Internet Printing Protocol) en el puerto TCP 631.
Los archivos de configuración de CUPS se encuentran en /etc/cups mientras que la configuración de las impresoras está específicamente en el archivo /etc/cups/printers.conf.
Para administrar el servidor, así como instalar y manejar impresoras, se utiliza un navegador web, apuntando al URL:
http://localhost:631
El mismo sistema brinda mucha ayuda, y es relativamente fácil de aprender a usar. Cuando se realicen tareas administrativas, se solicitarán credenciales. Se debe ingresar el usuario root y su contraseña.
Incorporar los conceptos necesarios para aprovechar la criptografía de clave pública provista por GNUPG
Básicamente, se pueden diferenciar dos tipos de criptografía:
La criptografía de clave pública permite asegurar tanto la identidad de quien envía un mensaje, y además que ese mensaje sea leído exclusivamente por el destinatario a quien va dirigido.
Cada remitente que envía un mensaje posee dos claves. Una clave es pública y se puede entregar a cualquier persona; la otra clave es privada y el propietario debe guardarla de modo que nadie tenga acceso a ella. Además, los métodos criptográficos garantizan que esa pareja de claves sólo se puede generar una vez, de modo que se puede asumir que no es posible que dos personas hayan obtenido casualmente la misma pareja de claves.
Entonces, se observan dos maneras de trabajar con este tipo de criptografía:
Conocer la forma en que algunas distribuciones de Linux manejan los paquetes de software, y aprender a utilizar los sistemas de paquetes DPKG y RPM.
Debian fue una de las primeras distros en ofrecer un sistema de paquetes para la instalación, actualización y remoción de software. El sistema de paquetes de software que utiliza se llama Debian Package (dpkg). Éste permite instalar, desinstalar y revisar el software instalado en el equipo, con una alta confiabilidad, y de manera modular.
Se utilizan para ello dos comandos principales: dpkg y apt-get, y un tercero llamado aptitude, de funcionalidad ampliada. El primero es el comando más importante, mientras que el segundo y el tercero son frontends que utilizan dpkg para realizar tareas automáticas como resolver dependencias, instalar y desinstalar, a la vez que simplifican el bajar paquetes desde los repositorios, realizar búsquedas de software y otras tareas habituales.
Por ejemplo, para instalar un paquete previamente descargado, utilizando dpkg:
dpkg -i paquete.deb
Para instalar un paquete con apt-get, el cual se conectará directamente a un repositorio, y realizará también la descarga previa:
apt-get install paquete
La configuración de apt-get se encuentra en /etc/apt. Los repositorios se configuran en el archivo /etc/apt/sources.list y en archivos de texto plano en el directorio /etc/apt/sources.list.d
Por ejemplo, para hacer que apt-get utilice un proxy con el puerto 8080 al bajar los archivos de Internet, se debe agregar la siguiente línea en apt.conf:
Acquire::HTTP::Proxy "http://proxy:8080";
Por ejemplo, para configurar el repositorio de Debian.net en la versión Debian Jessie, así como disponer de los paquetes en “contrib” y “non-free” (paquetes de software adicionales no libres), el archivo sources.list debe quedar como:
deb http://http.debian.net/debian jessie main contrib non-free deb-src http://http.debian.net/debian jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free # jessie-updates, previously known as 'volatile' deb http://http.debian.net/debian jessie-updates main contrib non-free deb-src http://http.debian.net/debian jessie-updates main contrib non-free
Una vez creado éste, se debe actualizar el listado de paquetes con apt-get update para poder disponer de ellos.
Para instalar el repositorio Deb Multimedia que agrega gran cantidad de librerías y programas específicos para multimedia, se debe agregar un archivo en /etc/apt/sources.list.d/deb-multimedia.list con el siguiente contenido:
# Deb-multimedia deb http://www.deb-multimedia.org jessie main non-free
Actualizada la base de datos con apt-get update, se dispondrá de una gran cantidad adicional de paquetes de software relacionados con esa temática.
Tareas comunes a realizar son, por ejemplo, encontrado un archivo verificar si es oficial de la distribución o no, o verificar la integridad de los archivos instalados a partir de un paquete.
Buscar a qué paquete pertenece un archivo:
dpkg -S /ruta/al/archivo
Verificar la integridad de los archivos de un paquete, se debe instalar un paquete llamado “debsums” con apt-get install debsums y luego ejecutar:
debsums paquete
aptitude ofrece funcionalidad similar a apt-get, a la vez que permite otras tareas como buscar paquetes. Por ejemplo, para actualizar el listado de paquetes y actualizar todos los que estén instalados y tengan una nueva versión en los repositorios:
aptitude update && aptitude upgrade -V
Para buscar algo en la base de datos de paquetes, sin importar si están instalados o no:
aptitude search "cadena a buscar"
Buscar los paquetes cuyo nombre o descripción tenga la palabra “bash” y además estén instalados:
aptitude search '~i bash'
Mostrar información sobre un paquete:
aptitude show paquete
Purgar los archivos de configuración de todos los paquetes que hayan sido desinstalados:
aptitude purge '~c'
Rocky es un sistema operativo basado en el código fuente de Red Hat Enterprise Linux. El sistema de paquetes de software que utiliza se llama Red Hat Package Manager (RPM). Éste permite instalar, desinstalar y revisar el software instalado en el equipo, con una alta confiabilidad, y de manera modular.
Se utilizan para ello dos comandos principales: rpm y yum. El primero es el comando más importante, mientras que el segundo es un frontend que utiliza rpm para realizar tareas automáticas como resolver dependencias, instalar y desinstalar, a la vez que simplifica el bajar paquetes, realizar búsquedas de software y otras tareas habituales.
Por ejemplo, para instalar un paquete previamente descargado, utilizando rpm:
rpm -iv paquete.rpm
Para instalar un paquete con Yum, el cual se conectará directamente a un repositorio, y realizará también la descarga previa:
yum install paquete
La configuración de Yum se encuentra en /etc/yum.conf. Los repositorios se configuran en archivos de texto plano en /etc/yum.repos.d
Por ejemplo, para hacer que Yum utilice un proxy con el puerto 8080 al bajar los archivos de Internet, se debe agregar la siguiente línea en yum.conf:
proxy=http://proxy.dominio:8080
Para configurar el repositorio de DCArsat, por ejemplo, se debe crear un archivo /etc/yum.repos.d/dcarsat.repo:
[dcarsat] name=dcarsat baseurl=http://mirrors.dcarsat.com.ar/centos/6.5/os/x86_64/ enabled=1 gpgcheck=1 gpgkey=http://mirrors.dcarsat.com.ar/centos/6.5/os/x86_64/RPM-GPG-KEY-CentOS-6
Una vez creado éste, se debe eliminar la caché de Yum con yum clean all para que comience a utilizarlo.
Para instalar los repositorios EPEL (Extra Packages for Enterprise Linux), simplemente se debe ejecutar el comando:
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Hecho esto, se dispondrá de una enorme cantidad adicional de paquetes de software útiles.
Tareas comunes a realizar con rpm son, por ejemplo, encontrado un archivo verificar si es oficial de la distribución o no, o verificar la integridad de los archivos instalados a partir de un paquete.
Buscar a qué paquete pertenece un archivo:
rpm -qf /ruta/al/archivo
Verificar la integridad de los archivos de un paquete:
rpm -Vv paquete