viernes, 22 de enero de 2010

Entendiendo lo basico de la linea de comandos (1/3)

Linux, toma prestadas muchas cosas de Unix, y Unix empezó como un sistema operativo basado en texto. Linux guarda mucho de esta herencia, lo que significa que para entender cómo utilizar y, en especial, administrar Linux, debes entender por lo menos lo básico de su consola. Es por eso, que inicio este curso con una introducción al Shell de Linux (el programa encargado de recibir y procesar los comandos de texto.).

Este capítulo empieza entonces con información básica del Shell, incluyendo opciones y procedimientos para mejorar y optimizar su uso.

Antes de que hagas cualquier cosa con Linux, debes entender cómo utilizar el Shell. Existe una gran variedad de estos, pero casi todos tienen las mismas características en común. Entender estas características básicas te ayudara en tu día a día con Linux, así que empezaré por describir algunas de estas y uno que otro comando. También debes entender las variables de entorno del Shell, que son espacios para mantener información que puede ser útil para diferentes programas. Y finalmente explicare como obtener mas información sobre los comandos que deseas utilizar.

Explorando las opciones de tu Shell

Como en muchos componentes claves del sistema, Linux provee un gran rango de opciones para los shells. Un listado completo sería muy largo, pero las opciones más comunes incluyen:

bash (Burn Again SHell): Esta basado en el antiguo Bourne shell de Unix, pero lo mejora de muchas maneras. En Linux, bash es el shell por defecto de la mayoría de cuentas de usuario, y es el que utilizaremos en este curso dado que es el shell en el cual hace énfasis el LPI.

bsh (Bourne SHell): Sobre el cual se basa bash, es poco usado en Linux, y en algunas ocasiones el comando bsh es un link simbólico hacia bash.

tcsh: Este shell está basado en C Shell (csh). Es bastante común en algunos círculos de usuarios, pero no aparece por defecto en la mayoría de las distribuciones Linux. Aunque comparte muchas de las características de bash se diferencian en algunos aspectos, como por ejemplo la forma en que cada uno maneja las variables de entorno.

csh (C SHell): Es usado en la actualidad muy poco en Linux, pero si un usuario está familiarizado con este tcsh es un buen reemplazo.

ksh (Korn SHell): Fue diseñado para tomar lo mejor de Bourne Shell y C Shell y mejorarlo, actualmente tiene un grupo pequeño de fieles seguidores.

Además de estos, existen otra docena de obscuras alternativas. En Linux la mayoría de los usuarios utilizan bash al venir predeterminado en las distribuciones más comunes. Pero otros sistemas operativos utilizan tcsh o csh como predefinidos. Generalmente el archivo /bin/sh es un link simbólico al shell predeterminado del sistema, en Linux vendría a ser /bin/bash.

Usando el shell:

El shell de Linux es sencillo para cualquier usuario que tenga experiencia previa con un sistema operativo basado en texto, se escribe un comando, con sus posibles opciones, el computador ejecuta el comando. La mayoría de los comandos son externos (son programas diferentes al shell), pero existen algunos que son internos, por lo tanto, saber diferenciar entre ellos es importante. También deberías conocer los atajos que hacen el uso de la consola mucho más sencillo (autocompletado, buscar comandos utilizados recientemente, o editarlo).

Iniciando la consola: Si inicias una sesión en Linux utilizando el modo texto, lo más probable es que inicies en la consola directamente (De hecho es la consola la que pregunta por tus datos para loguearte.). Si inicias sesión utilizando la interfaz grafica, tendrás que iniciar la consola de forma manual. Algunas veces encontraras un menú que te de la opción de ejecutar un programa llamado terminal, xterm, Konsole, o algo similar. Estos programas te permiten acceder a un shell (casi siempre bash) y ejecutar programas en modo texto. Si no encuentras esa opción, busca la forma de ejecutar un comando de forma arbitraria (generalmente Alt + f2) y escribe xterm ó konsole.

Comandos internos y externos: Los comandos internos son, como te debes imaginar, integrados a la consola. La mayoría de los shell ofrecen un grupo de comandos internos, pero existen diferencias entre estos. Puedes consultar el manual de tu consola usando man para obtener más detalles si estas usando algún shell exótico. Los comandos internos que probablemente utilizaras te permiten realizar tareas como:

Cambiar el directorio en el que estás trabajando: Mientras trabajas en la consola, estás trabajando en un directorio específico. Cuando te refieres a un archivo sin proveer la ruta completa, la consola trabaja sobre el archivo ubicado en el directorio actual (Reglas similares aplican para muchos programas). El comando cd cambia el directorio actual de trabajo. Por ejemplo, escribiendo cd /home/jaime cambia el directorio actual a /home/jaime. El símbolo tilde (~) es un atajo muy útil, sirve para referirse a nuestro directorio home. Así que en mi caso por ejemplo cd ~ tendría el mismo efecto que cd /home/jaime dado que mi directorio home es /home/jaime.

Mostrar el directorio actual de trabajo: El comando pwd muestra (imprime en la pantalla) el directorio actual en el que estamos trabajando.

Mostrar una línea de texto: El comando echo muestra el texto que se le envié, por ejemplo, escribiendo echo Hola Mundo hace que se muestre por pantalla la cadena "Hola Mundo". Esto podría verse como poco útil, pero es muy útil cuando escribimos scripts, o cuando deseamos saber el contenido de las variables de entorno.

Ejecutar un programa: El comando exec inicia el programa externo que se especifique, por ejemplo exec miprograma ejecuta miprograma. En la mayoría de los casos, esto se puede hacer simplemente escribiendo el nombre del programa que desees iniciar, pero el comando exec tiene una característica especial, en lugar de iniciar un nuevo proceso que corra junto al shell, el nuevo proceso reemplaza el shell. Cuando el nuevo proceso termina sus tareas, es como si cerraras igualmente la terminal.

Medir el tiempo de una tarea: El comando time mide cuanto tiempo tarda un comando en ejecutarse. Por ejemplo, time pwd nos dice cuanto tiempo el sistema tardó en ejecutar el comando pwd. El tiempo es mostrado una vez el proceso termine todas sus tareas. Se muestran tres tiempos: tiempo total de ejecución (alias tiempo real), tiempo de CPU del usuario y tiempo de CPU del sistema. Los últimos dos valores hablan del tiempo de CPU que se consumió, y lo más probable es que sean mucho menores que tiempo total de ejecución.

Set: En la forma más básica, set muestra una gran variedad de opciones relacionadas con las operaciones de bash. Estas opciones tienen un formato parecido a las variables de entorno, pero no son lo mismo. Puedes pasar varias opciones a set para que estas tengan sus efectos sobre un gran número de operaciones del shell.

Cerrar el shell: Los comandos exit y logout, ambos cierran el shell. El comando exit cierra la terminal, pero el comando logout solo cierra los shell de sesión, esto quiere decir, aquellos iniciados en modo texto a diferencia de los que corren en ventanas de xterm o parecidos.

Esta lista de comando no está completa, mas adelante hablare de otros comandos internos, pero si deseas saber más puedes consultar la documentación de tu shell, en el caso de bash puede ser man bash.

Algunos de estos comandos internos tienen una copia externa que realizan las mismas tareas, pero estos comandos externos no siempre están disponibles en todos los sistemas. Incluso cuando están disponibles, los comandos internos tienen preferencia a menos que se provea la ruta desde la que se quiere ejecutar, por ejemplo escribiendo /bin/pwd en lugar de pwd.

Cuando se escribe un comando que no es reconocido por el shell como uno de sus comandos internos, el shell verifica sus "rutas" (path) para encontrar un programa con ese nombre para ejecutarlo. El path es una lista de directorios en los cuales los programas pueden ser encontrados. Está definido por la variable de entorno PATH como se explicara más adelante. Una cuenta de usuario normal, tiene alrededor de una docena de directorios en su PATH. Puedes ajustar las rutas modificando la variable PATH en un archivo de configuración del shell, como también se explicará más adelante.

Puedes ejecutar programas que no están dentro de las rutas si provees la ruta completa a estos en la consola. Por ejemplo, escribiendo ./miprograma ejecutará el programa miprograma en el directorio actual, y /home/jaime/foobar ejecuta el programa foobar ubicado en el directorio /home/jaime.

1 comentario:

Diego Camacho dijo...

Chevere el resumen de la primera clase LPI.