Conceptos básicos

De Wikiunix

Conceptos básicos
Definición del vocabulario básico y las palabras que se suelen emplear en el ámbito de los sistemas Unix.
Tiempo 2 horas y 30 minutos
Nivel Principiante
Bibliografía Manual Práctico de Linux. Comandos, editores y programación Shell. - Mark G. Sobel • FAQ sobre Linux - es.comp.os.linux.* - 1999-2000 Rafael Martínez (GFDL)
Prerrequisitos Unix

Una vez sepas identificar qué es un sistema Unix y qué no lo es, hay que iniciarse en la jerga habitual dentro de dichos sistemas. Se utiliza un vocabulario especial y unos conceptos sobre los cuales se sostienen las ideas principales que debemos tener claras. Para ello, vamos a aclarar algunos de estos conceptos especiales.

Contenido

Vocabulario básico

  • Archivos o ficheros: colecciones de información (datos relacionados entre sí), localizada o almacenada como una unidad en alguna parte de un ordenador.
    • Archivo oculto: Archivo que no se encuentra visible al usuario por defecto. Sueles contener información de algún tipo de configuración del equipo. En Linux, podemos distinguir estos archivos porque comienzan por un punto (.).
  • Directorio: agrupación de archivos de datos. En Unix, el directorio se organiza a partir del directorio raíz "/", el cual contiene archivos y otros directorios. Esos directorios pueden contener archivos y directorios y así sucesivamente. Esto se organiza por el sistema en una estructura llamada árbol.
    • Directorio casa o de inicio: directorio que contiene los archivos personales de algún usuario en particular. En Unix, este directorio alberga archivos de configuración, (generalmente ocultos, por ejemplo comenzando con .), documentos, programas instalados localmente, etc. El directorio de inicio se define como parte de los datos de las cuentas de usuario.
    • Directorio de trabajo: directorio en el que el proceso de nuestra shell se encuentra en ejecución, es decir, no es un directorio real (que existe ya definido) sino una convención para hacernos creer que nos encontramos en un directorio y así simplificar nuestro trabajo.
      Informalmente podríamos decir que el directorio de trabajo es el directorio en que nos encontramos en un instante de tiempo determinado, aunque esto sea solo una simulación.
  • Ruta o path: jerarquía de directorios en la que se halla un elemento del sistema de archivos. Es decir, sería como el camino que recorremos para llegar a un archivo determinado.
    • Ruta absoluta: señalan la ubicación de un archivo o directorio desde el directorio raíz del sistema de archivos. Se pueden distinguir de las rutas relativas fácilmente porque comienzan por "/", por ejemplo: /home/usuario/.bash_history
    • Ruta relativa: señalan la ubicación de un archivo o directorio a partir de la posición actual del sistema operativo en el sistema de archivos. Por ejemplo, usuario/.bash_history se refiere al archivo .bash_history dentro del directorio usuario en la ubicación actual.
      En sistemas Unix, la ruta ~ es una ruta relativa que lleva al directorio personal del usuario que ha insertado la ruta relativa,/home/usuario.
  • Demonio o daemon (Disk And Execution MONitor): proceso que se ejecuta en segundo plano en lugar de ser controlado directamente por el usuario, es decir, es un proceso no interactivo. Este tipo de programas se ejecutan de forma continua (infinita): aunque se intente cerrar o matar el proceso, este continuará en ejecución o se reiniciará automáticamente, sin intervención de terceros y sin dependencia de consola alguna.
    Un ejemplo son los demonios cronológicos como cron, que realizan tareas programadas como mantenimiento del sistema en segundo plano.
  • Login y password: Nombre de usuario y contraseña para acceder al sistema o para identificarse cuando sea necesario.
  • Orden, comando o mandato: instrucción que el usuario proporciona a un sistema informático, desde la línea de comandos o desde una llamada de programación.
  • Consola, también llamada terminal o línea de comandos: es un intérprete que espera órdenes escritas por el usuario en el teclado, las interpreta y las entrega al sistema operativo para su ejecución. La respuesta del sistema operativo se muestra al usuario en la misma ventana. A continuación, el programa shell queda esperando más instrucciones.
  • Ventana de línea de comandos o prompt: es lo que se muestra cuando se inicia el shell a través de la lectura de su configuración completa (en un archivo del directorio /etc), tras la lectura de la configuración propia del usuario (en /home/usuario/.configuration_file).
    Por defecto, en la mayoría de los shells el "prompt" (aviso) consiste en el nombre de la máquina seguido por dos puntos (:), el directorio actual y luego, un carácter que indica el tipo de usuario conectado:
  • "$" define a un usuario normal
    usuario@usuarioPC:~$
  • "#" define al administrador, llamado "root"
    root@usuarioPC:/home/usuario#

Variables de entorno

Las variables de entorno son un conjunto de valores dinámicos que normalmente afectan el comportamiento de los procesos en un ordenador.

Algunas de estas variables más útiles (podemos verlas por ejemplo, mediante el comando echo), que pueden consultarse ya sea en la línea de comandos o dentro en la programación de shells script son:

Lo más básico
Variable Valor Ejemplo Descripción
HOME /home/usuario Directorio raíz del usuario
LOGNAME Usuario Identificador del usuario en el sistema
PATH /bin:/usr/local/bin Caminos o rutas
SHELL /bin/bash Shell del usuario
PS1 $ Prompt del shell
MAIL /var/mail/usuario Directorio del buzón de correo
TERM xterm Tipo de terminal que el usuario utiliza
PWD /home/usuario Directorio actual en que se encuentra el usuario

Las órdenes env, set y printenv muestran todas las variables de entorno junto con sus respectivos valores. env y set se usan también para asignarles valores.

$ env SSH_AGENT_PID = 598 MM_CHARSET = ISO-8859-15 TERM = xterm DESKTOP_STARTUP_ID = SHELL = /bin/bash WINDOWID = 20975847 LC_ALL = es_ES@euro USER = juan LS_COLORS = no = 00:fi = 00:di = 01;34:ln = 01; SSH_AUTH_SOCK = /tmp/ssh-wJzVY570/agent.570 SESSION_MANAGER = local/aopcjj:/tmp/.ICE-unix/570 USERNAME = juan PATH=/soft/jdk/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/ X11:/usr/games MAIL = /var/mail/juan PWD = /etc/skel JAVA_HOME = /soft/jdk LANG = es_ES@euro GDMSESSION = Gnome JDK_HOME = /soft/jdk SHLVL = 1 HOME = /home/juan GNOME_DESKTOP_SESSION_ID = Default LOGNAME = juan DISPLAY = :0.0 COLORTERM = gnome-terminal XAUTHORITY = /home/juan/.Xauthority _ = /usr/bin/env OLDPWD = /etc

printenv permite también mostrar el valor de una variable de entorno particular si se le pasa su nombre como único parámetro.

printenv SHELL /bin/bash

Cómo obtener la ayuda del sistema

La búsqueda de ayuda es una de las destrezas más importantes para el buen administrador de sistema. Una persona nunca podrá conocer todas las opciones de todas los programas. Es más, también puede olvidar algunos o desconocer otros nuevos que surgen cada día. Por ello es de especial importancia conocer los distintos modos de búsqueda de ayuda en un sistema UNIX.

El manual

Artículo principal: man


El manual de usuario del sistema es la principal fuente de documentación que se ha usado de manera "clásica" en los sistemas Unix. Actualmente la mayoría de programas que funcionan en modo gráfico no incluyen entrada en el manual, pero sí la mayoría de programas de consola y muchas bibliotecas (incluyendo las llamadas al sistema).

El manual está ordenado por secciones, conteniendo cada sección muchas entradas (que también se suelen denominar "páginas"). Lo normal es que cada programa tenga una entrada con su sintaxis, sus opciones, ejemplos de uso, entradas relacionadas, etc.

man <entrada>

El programa man permite, entre otras cosas, ver la página solicitada, moverse sobre la misma y realizar búsquedas. Para realizar la búsqueda, presione / y después teclee la palabra que busca (realmente man usa los mismos controles que less)

A veces, puede haber más de una entrada en el manual. Por ejemplo, puede que coincidan el nombre de una llamada al sistema con el de un comando o un fichero del sistem. En este caso, hay que especificar qué sección quiere consultarse:
man n <entrada>
siendo n el número de sección. Por ejemplo, para ver la entrada de la orden passwd escribiría
man 1 passwd
Pero para ver la descripción del fichero passwd (que almacena información de los usuarios del sistema) escribiría
man 5 passwd

Existen también diversas herramientas gráficas de exploración de los manuales, por ejemplo xman y tkman, así como versiones on-line del manual (por ejemplo esta de Ubuntu).

En caso de que se desee buscar alguna entrada en el manual se puede usar al orden apropos o
man -k <término>

El sistema info

El sistema de ayuda info nació para superar la principal limitación del "man": su estatismo. El sistema info nos permite navegar por el mediante enlaces similares a los de una web.

Dependiendo del autor de un programa podremos encontrarnos con página de manual pero no de info, viceversa, o el mismo contenido en ambos sistemas, etc. Por lo tanto siempre es recomendable, si no hemos obtenido información suficiente con uno de los sistemas, consultar el otro.

Ayuda incorporada

Además de la ayuda "tradicional" ([man] e [info]), los programas suelen incorporar ayuda de varias formas:

  • Si son programas gráficos suelen tener una entrada de menú o pestaña con "Ayuda".
  • Si son programas interactivos en modo texto suelen tener alguna forma de ayuda. Por ejemplo
    • En el comando top basta con pulsar la letra "h". Para salir de la ayuda y después del sistema se usa la letra "q" (como suele ser habitual en la mayoría de programas interactivos de texto).
    • En emacs debemos pulsar la combinación de teclas Control+h dos veces (lo que se suele escribir como C-h C-h) para obtener ayuda o C-h y la letra "t" para acceder a un tutorial (también disponible en el menú "Ayuda" > "Tutorial").
  • Si son programas no interactivos suelen tener alguna opción para la ayuda, normalmente --help (como chmod o ls) o a veces con -h.

Ayuda adicional de los paquetes

Además de la ayuda del sistema y la ayuda incorporada algunas aplicaciones incluyen documentación extra al instalarlas: manuales, tutoriales, guías de usuario, plantillas, hojas de referencia e incluso libros enteros, lista de errores detectados en el programa, descripciones de las funcionalidades añadidas al programa etc.

Normalmente, estos componentes de documentación se instalan en el directorio /usr/share/doc (o /usr/doc dependiendo de la distribución), donde normalmente se crea un directorio por paquete de aplicación (normalmente la aplicación puede disponer de paquete de documentación por separado). Por ejemplo:

  • El excelente sistema de documentación automática doxygen incluye un manual de casi 150 páginas en /usr/share/doc/doxygen/doxygen_manual.pdf
  • Si queremos una hoja de referencia de Emacs sólo tenemos que irnos a /usr/share/emacs/22.1/etc/refcard.ps (siendo 22.1 la versión de Emacs que tenemos instalada).
  • Para saber los errores detectados en la versión de sudo instalada se puede consultar /usr/share/doc/sudo/BUGS
  • La lista de funciona incluidas en las últimas versiones de Inkscape está en /usr/share/doc/inkscape/changelog.gz

Ayuda de escritorio o distribución

Los escritorios X, como Gnome y KDE, normalmente también traen sistemas de documentación propios con su documentación y manuales, así como información para desarrolladores, ya sea en forma de ayudas gráficas en sus aplicaciones, o en aplicaciones propias que recopilan las ayudas (por ejemplo, devhelp en Gnome).

Igualmente sucede con ciertas distribuciones como OpenSUSE o similares. Por ejemplo, Red Hat suele venir con unos CD de manuales en PDF o HTML que son instalables en el sistema.

Otras formas de ayuda

Además de todas las formas de ayuda comentadas anteriormente (todas ellas incluidas en el sistema) existen otras dos formas más: manuales impresos (que se pueden comprar, como por ejemplo los libros de la tienda de GNU) y ayuda a través de la web.

Si buscamos ayuda a través de la web recomendamos consultar primero webs oficiales del sistema, o web de grupos de usuarios que cuenten con el respaldo de la comunidad, evitando búsquedas "a semi-ciegas" con un buscador cualquiera.


Malas prácticas y consejos útiles

Para cualquiera que no haya utilizado nunca un sistema Unix o esté acostumbrado a los malos vicios de sistemas privativos, sería conveniente echar un vistazo a la siguiente lista con cosas que NO se deben hacer nunca, así como una serie de consejos que pueden ser de utilidad:

  1. No busques software gratuito ni mucho menos saltándote las licencias privadas. Existen muchísimas alternativas libres a la gran mayoría de aplicaciones privativas actuales, las cuales se pueden encontrar fácilmente en los repositorios de paquetes de tu sistema o en forjas de software como sourceforge.
    Probablemente encuentres varias aplicaciones para hacer lo mismo: en la variedad está el gusto, busca la que más cómoda te sea.
  2. Nunca debemos ejecutar X como usuario root: éste debe ser usado sólo para tareas administrativas.
    Si en este caso existiera una vulnerabilidad en la aplicación, un atacante podría hacer lo que quisiera con nuestro sistema.
  3. Siempre crear un usuario para el trabajo cotidiano. Si éste necesita habitualmente acceso a root, puede agregarse al grupo wheel. Esto hace posible que un usuario normal recurra a la orden su para poseer temporalmente los privilegios de administrador.
  4. Nunca dejes una terminal abierta estando conectado como root. Si no vas a tocar esa terminal en un rato, ciérrala o vuelve a tu usuario con la orden:
    su <usuario>
  5. Procura crear alias que sean útiles en tu trabajo diario.
    Puedes definir alias que invoquen una orden determinada para poder simplificar tu trabajo. Si quieres definirlos para un usuario determinado, es conveniente definirlos en el fichero ~/.bash_aliases, teniendo en cuenta que si no existe debes crearlo y que debes asegurarte de que en el fichero ~/.bashrc se encuentran las siguientes líneas tal y como aparecen a continuación:
    Archivo: ~/.bashrc
    # Alias definitions.
    # You may want to put all your additions into a separate file like
    # ~/.bash_aliases, instead of adding them here directly.
    # See /usr/share/doc/bash-doc/examples in the bash-doc package.

    if [ -f ~/.bash_aliases ]; then
    :. ~/.bash_aliases
    fi
Se podrían incluir estos alias directamente en el fichero ~/.bashrc, pero es más adecuado utilizar ~/.bash_aliases por distinguir más fácilmente los alias del sistema de los creados por el usuario.
Un ejemplo bastante útil y simple es el forzado de borrado interactivo:
Archivo: ~/.bash_aliases
alias rm='rm -i'

Así, cada vez que vayamos a borrar uno o varios ficheros nos preguntará si estamos seguros de querer eliminarlo. Recuerda que en un terminal no hay papelera de reciclaje: lo que se borra desaparece para siempre.

  1. Es conveniente al instalar nuestro sistema definir las particiones manualmente, para crear una partición extra que se monte en /home, además de la partición de intercambio y la de la raíz del sistema de ficheros. Así si ocurriese algún problema por el que debamos reinstalar el sistema, no tendremos que realizar backup alguno (al menos no de forma necesaria, nunca está de más una copia de seguridad).
  2. Intenta no desaprovechar lo que la consola te aporta. Debes ser eficiente:
  • Utiliza la función de autocompletar (generalmente con la tecla Tabulador).
  • Utiliza el histórico de comandos (pulsando las flechas de dirección hacia arriba y abajo).
  • Utiliza Shift+RePag/AvPag para moverte hacia arriba/abajo en la pantalla de la terminal.
  • Utiliza trucos de la librería readline para modificar la línea actual:
    • Inicio de Línea: CTRL-a
    • Fin de línea: CTRL-e
    • Carácter Atrás: CTRL-b
    • Carácter Adelante: CTRL-f
    • Palabra Adelante: ALT-f
    • Palabra Atrás: ALT-b
    • Borrar carácter: CTRL-d
    • Borrar Palabra: ALT-d


Ejercicios

Ejercicios de la sección de conceptos básicos
Aspectos pedagógicos:
Preparación previa: Para hacer estos ejercicios debes acceder al sistema con el usuario por defecto usuario (recuerda que la contraseña es unix). A continuación:
  • Ve al directorio casa del usuario actual. Comprueba que existe un directorio llamado unix y dentro de éste un subdirectorio llamado rutas. Para ello ejecuta:
    ls unix
    Debe aparecer el directorio rutas. En caso de que no exista alguno de estos elementos, puedes hacer varias cosas:
    1. Descargar el archivo comprimido con la jerarquía de elementos de comprobación que se encuentra en la portada del wiki y descomprimirlo en el directorio casa del usuario actual.
    2. Apagar la máquina virtual y restaurar el snapshot que funcionaba bien.
    3. Apagar la máquina virtual y borrarla eliminando el disco duro virtual. A continuación, descargar el disco duro y volver a configurar la máquina de nuevo.
  • Ve al subdirectorio unix/rutas. Limpia el sistema antes de realizar los demás ejercicios para prevenir posibles incongruencias:
    python rutas.py -c
    o
    python rutas.py --clean
  1. ¿Cuántas páginas man hay en la subsección de dispositivos del manual del sistema?
  2. ¿Cómo diferencio entre ruta absoluta y ruta relativa?
  3. Busca qué utilidades crean y trabajan con archivos.
  4. Clasifica las rutas descritas a continuación en nombre de ruta absoluta o de ruta relativa:
    • vers_nuevo
    • /var/www/index.html
    • ..
    • /home/usuario/Doc
    • ../A/B/c
    • .plan.planner
Si deseas comprobar el ejercicio, introduce las rutas absolutas en el fichero absolutas.txt y las rutas relativas en relativas.txt. Luego ejecuta el script de comprobación (rutas.py) en el mismo directorio en que se encuentren dichos archivos.


Véase también

Ampliación de conceptos básicos

Herramientas personales