2.1. Tutorial local sobre la terminal UNIX

GNU/Linux es uno de los términos empleados para referirse a la combinación del núcleo o kernel libre similar a Unix denominado Linux con el sistema GNU. Su desarrollo es uno de los ejemplos más prominentes de software libre; todo su código fuente puede ser utilizado, modificado y redistribuido libremente por cualquiera bajo los términos de la GPL y otra serie de licencias libres. El nombre GNU, GNU's Not Unix (GNU no es Unix) viene de las herramientas básicas de sistema operativo creadas por el proyecto GNU, iniciado por Richard Stallman en 1983 y mantenido por la FSF. El nombre Linux viene del núcleo Linux, inicialmente escrito por Linus Torvalds en 1991.

Existen infinidad de fuentes donde te puedes documentar acerca de Linux. Por ejemplo, en Linux.org tienes cursos de distinto nivel (básico, intermedio y avanzado) para que lo trabajes según tus necesidades.
Es necesario no obstante recalcar que para trabajar con fluidez con el S.O. UNIX es útil saber manejarse en la terminal para operaciones cotidianas como manejar archivos, instalar aplicaciones, gestionar el sistemas, etc. Internet está lleno de tutoriales para esto, pero, ¿por dónde empezar?. Por ejemplo, sigamos el consejo del libro "ROS by example" de R.P. Goebel:
"If you are already a veteran Linux user, you are well ahead of the game. If not, you might want to run through a tutorial or two before proceeding. Since web tutorials come and go every day, you can simply Google something like "Ubuntu tutorial" to find something you like. However, bear in mind that most of your work with ROS will take place at the command line or in some form of text editor. A good place to start on command line basics is Using the Ubuntu Terminal. "
En consecuencia, se recomienda además pasarse una tranquila sesión de experimentación con este o similar tutorial (otro puede ser este, producido en el Dpto. de ingeniería de la U. de Cambridge), hasta coger la suficiente agilidad como para controlar las principales operaciones del sistema desde la terminal.
No obstante, y a modo de ayuda, nosotros te proporcionamos a continuación uan breve introducción a algunos de los conceptos y comandos más necesarios en el manejo del sistema.
Linux Shell

Es un intérprete de comandos. Permite al usuario interactuar con el sistema. Existen varios (sh, ksh, csh, bash ...) siendo Bash el intérprete por defecto en la mayoría de las distribuciones Linux actuales.

Login

Al iniciar sesión en un shell se desencadenan una serie de acciones que configuran el entorno. En el caso de Bash estas acciones se especifican en los siguientes ficheros:
/etc/profile
~/.bash_profile
~/.bashrc
y al cerrar la sesión:
~/.bash_logout
El símbolo '~' equivale a carpeta home. Por ejemplo, si el usuario se llama laura, ~/.bashrc probablemente equivalga a /home/laura/.bashrc. Ejecutando el comando cd sin mas argumentos, nos posicionaremos en nuestro home.

Comandos básicos

lsmuestra la lista de ficheros y directorios contenidos en el directorio actual (como dir en DOS).
cd nombredirectoriocambia al directorio llamado nombredirectorio.
find ruta expr_búsqueda acciónbusca archivos (ver "tutorial":http://content.hccfl.edu/pollock/unix/findcmd.htm)
passwdmodifica la contraseña del usuario actual.
cat nombreficheromuestra el contenido del fichero llamado nombrefichero.
pwdmuestra el directorio actual.
exit o logoutcierra la sesión actual.
man nombrecomandomuestra la ayuda (man) del comando nombrecomando.
touch nombreficherocrea un fichero vacío llamado nombrefichero.
cp ficheroorigen ficherodestinocopia el fichero ficheroorigen como ficherodestino.
mv ficheroorigen ficherodestinomueve el fichero ficheroorigen a ficherodestino.
mkdir nombredirectoriocrea un directorio llamado nombredirectorio.
rmdir nombredirectorioelimina un directorio llamado nombredirectorio.
rm nombreficheroelimina un fichero llamado nombrefichero.
chmod permisos nombreficheromodifica los permisos de acceso de un fichero.
chown usuario nombreficheroestablece usuario como propietario del fichero nombrefichero.
chgrp grupo nombreficheroestablece grupo como grupo asociado al fichero nombrefichero.
La mayoría de estos comandos admiten modificadores (ej: ls -la muestra una información más detallada) que extienden la funcionalidad indicada anteriormente. Se recomienda utilizarman nombrecomando para ver las opciones disponibles.En ocasiones es necesario realizar operaciones con privilegios de superusuario. Para ello se precede el comando sudo al comando a ejecutar y el sistema pedirá introducir la contraseña (ej: sudo chmod 777 nombrefichero).Existen muchos más comandos. Un listado mas exhaustivo puede encontrarse en http://ss64.com/bash/

Combinaciones de teclas en Bash

Ctrl+Amueve el cursor al inicio de la línea de comandos.
Ctrl+Cfuerza la terminación de un programa.
Ctrl+Dequivale a exit o logout.
Ctrl+Ael cursor al final de la línea de comandos.
Ctrl+Hgenera el caracter de borrado.
Ctrl+Llimpia el terminal.
Ctrl+Rbúsqueda en en el histórico de comandos.
Ctrl+Zsuspende la ejecución de un programa.
Flechas arriba/abajonavega por el historial de comandos.
Flechas izquierda/derechamueve el cursor a lo largo de la línea de comandos.
Shift+PageUp/PageDowndesplaza a lo largo del buffer del terminal.
Tabautocompletar nombre de fichero o de comando.
Tab Tabmuestra las posibilidades de autocompletar.

Sistema de Ficheros Linux

Se puede definir el sistema de ficheros de un sistema operativo como aquellas estructuras lógicas y sus correspondientes métodos que utiliza el propio sistema para organizar los ficheros en disco [3].Los sistema de ficheros GNU/Linux poseen una estructuración jerárquica o “en árbol”. Es decir, el sistema contiene unos directorios (que a su vez podrían contener más subdirectorios), que asocian características de ficheros con los ficheros guardados en la partición. Normalmente el soporte físico puede contener más de una partición, y cada una de esas partiones requieren de formato lógico mediante un sistema de ficheros específico. Los sistema de ficheros permiten estructurar la información para poder mostrarla, tanto de forma gráfica (si el sistema cuenta con esta característica) como de forma textual mediante los denominados gestores de archivos.La relación descrita entre los ficheros y la forma de localizarlos se realiza, en los sistemas GNU/Linux, mediante una tabla de asignación de inodo. Un inodo contiene los parámetros característicos del objeto referenciado (permisos, fechas, ubicación...). Este objeto puede ser tanto un fichero, un directorio, un enlace simbólico y, por generalizar, cualquier objeto que puede ser entendido por el sistema de ficheros. Cada inodo está identificado por un número entero único (en el sistema de ficheros), y los directorios son los responsables de guardar ternas de número de inodo y nombre identificativo de fichero. Cada fichero posee un único inodo, pero puede tener varios nombres que lo identifiquen.Para poder referenciar un fichero se puede utilizar la cadena de texto denominada ruta. La ruta es el resultado de la concatenación de los nombres identificativos de directorios y subdirectorios que dibujan la estructura arbórea hasta llegar al fichero, más el nombre del propio fichero.Los requerimientos esperables de un sistema de ficheros pueden ser:
  • poder acceder a la información (ficheros) de forma óptima
  • soportar permisos de usuario, del grupo del usuario y del “resto de mundo”
  • soportar listas de control de acceso (denominadas ACL's)
  • garantizar la coherencia de la información, así como evitar la fragmentación
  • permitir enlaces (simbólicos y duros)
  • poder recuperar la información después de una caída de tensión brusca (journaling)
Existen diversos tipos de sistema de ficheros:
  • de disco (ext2, ext3, reiserfs, xfs, jfs, iso9660, ...)
  • en red (NFS, CIFS, ...)
  • virtuales (VFS, SysFS, ..)
  • especiales (SWAP, ...)
En los sistemas GNU/Linux, los sistemas de ficheros pueden ser creados desde un terminal mediante la orden “mkfs. La opción que crea uno u otro sistema es la “-t”, a la que se debe añadir el dispositivos (la partición, por ejemplo) físico donde crear el sistema de ficheros. Por ejemplo, si tuviésemos que crear un sistema de ficheros ext3 en la segunda partición de nuestro primer disco, la orden sería:
#mkfs -t ext3 /dev/hda2
Para evitar realizar repetidamente la operación anterior en sistema de ficheros habituales, se especifican los parámetros de montaje para cada sistema en el archivo /etc/fstab de modo que se monten automáticamente en el arranque.

Estructura de directorios

La estructura de directorios habitual de un sistema Linux depende en gran medida de la distribución. En el caso de las distribuciones Debian (y sus derivadas) la estructura es la siguiente:
/bootcontiene el núcleo (kernel) e información indispensable para el arranque del sistema.
/binguarda unos pocos programas que estarán disponibles incluso en los modos de ejecución más restringidos (como bash, cat, ls, login, ps).
/sbinaquí encontramos los programas disponibles sólo para el administrador incluso en los modos de ejecución más restringidos (por ejemplo fsck, getty, halt).
/usraccesibles a usuarios finales y datos de estos programas que no requieren ser modificados (datos de sólo lectura).
/floppy, /cdrom, /mnt, /mediason directorios para montar disquettes, CD-ROMs y otros sistemas de archivos o dispositivos.
/libLibrerías indispensables y módulos (especialmente requeridas durante el arranque del sistema).
/etcArchivos de configuración de diversos programas y servicios.
/devAbstracciones a los dispositivos conectados (o que podrían conectarse) al ordenador.
/homeMantiene información de los usuarios del sistema.
/rootMantiene información del administrador del sistema.
/tmpArchivos temporales creados por algunos programas, que serán borrados por el sistema operativo durante el arranque.
/varEn este directorio los programas que lo requieran pueden mantener archivos que deban modificarse frecuentemente.
/procEste directorio es virtual, no está presente en el disco, porque es creado por el sistema para intercambiar información con más facilidad.

Montaje del sistema de ficheros

Para utilizar sistemas de ficheros adicionales al de nuestro sistema Linux (por ejemplo para leer un lapiz de memoria o un CD), es necesario "montarlos" previamente. Esto significa establecer una correspondencia entre el nuevo sistema de ficheros y una ubicación (una carpeta) en el original. Esto se realiza mediante el comando mount y normalmente requiere privilegios de superusuario y posiblemente la especificación del tipo de sistema de ficheros a montar.Por ejemplo, para acceder a la segunda partición de nuestro disco, sabiendo que es de tipo ext3 podríamos ejecutar el siguiente comando:
#mount -t ext3 /dev/hda2 /mnt
Hecho esto, la el directorio raíz del nuevo sistema estará accesible en la carpeta /mnt del original

Permisos de acceso

Se pueden establecer permisos sobre un archivo o directorio para:
  1. El propietario de un fichero o directorio.
  2. Usuarios pertenecientes a grupos a los que también pertenezca el propietario.
  3. Resto de usuarios.
Ejemplo: con el comando ls -l veremos un listado de ficheros y directorios. La primera columna contiene entradas de 10 caracteres.
-rw-rw-r--
El significado de esta notación es el siguiente (caracteres numerados de izquierda a derecha):
  1. se trata de un directorio (d) o un fichero (-)
  2. el propietario tiene permisos de lectura (r) o no (-)
  3. el propietario tiene permisos de escritura (w) o no (-)
  4. el propietario tiene permisos de ejecución (x) o no (-)
  5. usuarios del mismo grupo tienen permisos de lectura (r) o no (-)
  6. usuarios del mismo grupo tienen permisos de escritura (w) o no (-)
  7. usuarios del mismo grupo tienen permisos de ejecución (x) o no (-)
  8. resto de usuarios tienen permisos de lectura (r) o no (-)
  9. resto de usuarios tienen permisos de escritura (w) o no (-)
  10. resto de usuarios tienen permisos de ejecución (x) o no (-)
Estos permisos se pueden cambiar con el comando chmodEjemplos:
  • chmod +x nombrefichero daría permisos de ejecución al fichero nombrefichero (a propietario, grupo y resto)
  • chmod 664 nombrefichero daría permisos de lectura y escritura a propietario y grupo, y solo lectura a resto. Cada dígito se interpreta como su representación binaria sobre los caracteres rwx indicados anteriormente (000 = nada permitido, 110 = lectura y escritura permitidas, 111 = todo permitido, ...)

Software

Gestor de paquetes

Un sistema de gestión de paquetes es una colección de herramientas que sirven para automatizar el proceso de instalación, actualización, configuración y eliminación de paquetes de software. Suelen tener la capacidad de desinstalar los paquetes de manera recursiva, de forma que se eliminan todos los paquetes que dependen del paquete a desinstalar y todos los paquetes de los que el paquete a desinstalar depende, respectivamente.En sistemas derivados de Debian, la gestión de paquetes consiste fundamentalmente en las herramientas complementarias apt y dpkg.

Comandos apt

apt-get installDescarga de un paquete y de todas sus dependencias, instalación o actualización.
apt-get remove [--purge]Desinstalación de un paquete y todos los paquetes que dependen de él.
apt-get updateActualización de la información del gestor desde los servidores de paquetes (los servidores o mirrors se configuran en /etc/apt/sources.list).
apt-get upgradeActualización de los paquetes instalados a sus versiones más recientes siempre y cuando las dependencias no requieran la instalación de nuevos paquetes.
apt-get dist-upgradeActualización de los paquetes instalados a sus versiones más recientes, instalando o desinstalando las dependencias necesarias si han cambiado.
apt-cache searchBúsqueda de paquetes que contengan determinado texto en el nombre o la descripción.
apt-cache showDescripción de un paquete.
apt-cache showpkgDescripción detallada de un paquete y sus relaciones con otros paquetes.

Comandos dpkg

dpkg -iInstalación de un archivo de instalación Debian.
dpkg -cListado del contenido de un archivo de instalación Debian.
dpkg -IListado de información de paquete a partir de un archivo de instalación Debian.
dpkg -rDesinstalación de un paquete.
dpkg -PPurga de un paquete instalado (equivalente a desinstalación mas eliminación de archivos de configuración).
dpkg -LListado de archivos instalados por un paquete.
dpkg -sDescripción de un paquete instalado.
dpkg-reconfigureReconfiguración de un paquete instalado.

Utilidades

Edición de ficheros de texto en entorno no gráfico

Networking

Incompleto (referencia: http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch03_:_Linux_Networking)

Bibliografía

[1] The Linux Documentation Project 
[2] Linux in a Nutshell. O'Reilly. Ellen Siever; Aaron Weber; Stephen Figgins; Robert Love; Arnold Robbins 
[3] Sistema de ficheros GNU/Linux Observatorio Tecnológico 
[4] LHN 
Comments