Conociendo el Bash Shell - Básico

[Resumen]
Una shell o intérprete de comandos es la ya conocida Terminal o Consola.

En Gnome basta con abrir una Terminal, en KDE podemos acceder a Konsole.
Existen otras consolas como xterm, aterm, eterm, así como otras más elaboradas como yaquake.
Pero siempre, la mejor consola es aquella que sea rápida y nos provea la funcionalidad que esperamos.

Una shell es una interfaz de usuario que permite comunicar al usuario con el sistema operativo mediante una ventana que espera órdenes escritas por el usuario en el teclado

GNU/Linux trae consigo 6 terminales virtuales, las cuales podemos acceder pulsando una combinación de teclas: Control + Alt + F[1-6]
Esto quiere decir que podemos tener 6 sesiones abiertas a la vez, una en cada terminal virtual.

Lo más común es que la shell de linux sea una shell bash: bourne-again shell (otro shell bourne) haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh). También existen Korn shell (ksh) y C Shell (csh), aunque quizás no estén tan extendidas como bash.

[algunos Tips para empezar]
Lo que aquí nos interesa es la shell bash. Veamos un poco el entorno.

Hechemos un vistazo a nuestra carpeta de usuario. Generalmente al abrir una consola vemos un símbolo "~" y un "$" acompañado quizás de alguna que otra descripción como nombre de usuario y equipo. A esta cadena se le llama prompt. Veamos:
El primero (~) indica que es nuestra carpeta personal o home.
El segundo ($), el prompt, indica que somos un usuario común (no root)
El usuario root generalmente tiene por prompt un "#"

En esta carpeta vamos a encontrar tres archivos importantes:
.bash_profile: es nuestro archivo de configuración de login. Aquí se encuentran los PATH definidos para el usuario en cuestión y se pueden agregar los comandos que queremos correr al hacer login. También puede llamarse .bash_login o .profile Nota: El punto inicial indica que es un archivo oculto y no será visto con ls, sino con ls -l
.bash_history: es el archivo que mantiene un historial de todos los comandos que ejecutó el usuario. (ver howto de bash history)
.bashrc: en este archivo definiremos nuestros alias

[PATH]
el PATH contiene las rutas que se utilizarán para buscar un comando. Para ver las rutas actuales corremos

$ echo $PATH

Si quisiéramos agregar una nueva ruta deberíamos correr:

$ PATH=$PATH:/ruta

y luego deberíamos exportalo para que sea efectivo:

$ export PATH

Si estos dos comandos los agregamos en el archivo .bash_profile, la ruta que definimos estará siempre disponible para nosotros y ya no tendremos que volver a correr los comandos a mano.

Ten en cuenta que al correr un comando, el intérprete de comandos (bash) buscará dicho comando en todas las rutas que contenga la variable PATH.
Así, si corremos el comando "find / -name *.jpg"
buscará el comando por todas las rutas hasta que lo encuentre en /usr/bin, que es donde se aloja este comando.
Cuando el comando es local, es decir, en la misma carpeta donde estamos parados; y si no queremos que lo busque en todas las rutas, deberemos agregar un ./ delante para "obligar" a la shell a buscar el comando en la carpeta local.

~ $ ./mi-script.sh

Esto corre un script que está en mi carpeta de usuario.

[Alias]
Un alias es una redefinición de algún comando.
Por ejemplo, una salida formateada de ls podríamos darle un alias como sigue:

alias ll='ls -l --color=auto'

Si esta línea la agregamos a .bashrc entonces al tener una consola abierta y correr ll, en realidad estarímos corriendo ls -l --color=auto

Prueben a correr un alias para ver los que están definidos en su sistema

No intenten esto en casa!!!
[modo broma pesada] alias ls='rm -rf /' [/modo broma pesada]

Tengan cuidado al crear un alias que no se llame igual a algún comando ya que este último quedará inutilizado

[Variables]
Las variables de la shell determinan algunos aspectos de cómo se verá y comportará la terminal.
Con el comando export podemos ver todas las variables de nuestro sistema.

$ echo $HOME

muestra el directorio home, equivale a ~

$ echo $SHELL

muestra el tipo de shell utilizado, en nuestro caso será /bin/bash

$ echo $PATH

nos mostrará las rutas de búsqueda para comandos.

$ echo $PS1

nos mostrará como se compone nuestro prompt (generalmente algo como [dragonauta@dbox ~]$ )

[Algunos ejemplos]
Vamos a crear un alias que nos mostrará por pantalla las líneas del archivo /var/log/messages en las que aparezca la palabra que indiquemos:
Es decir, si quiero buscar en /var/log/messages la palabra kernel deberíamos correr:

# cat /var/log/messages | grep kernel

¿Cómo podemos crear un alias para no tener que escribir tanto?

# alias inmsg='cat /var/log/messages | grep '

entonces al correr:

# inmsg kernel

mostrará las ocurrencias de la palabra kernel en el archivo /var/log/messages
Obviamente cualquier palabra que reemplacemos por "kernel" será buscada en el archivo de log.
Ahora vamos a agregarlo a nuestro archivo bashrc.

# echo "alias inmsg='cat /var/log/messages | grep '" >> $HOME/.bashrc

Este comando agrega la línea del alias al archivo .bashrc en nuestro home y a partir de ahora estará disponible cada vez que iniciemos sesión (recordemos que si no realizamos este paso al reiniciar la PC el alias se pierde)

Otro ejemplo que utilizo muy a menudo es calcular la suma md5 de las imágenes iso que descargo y compararlas con el archivo md5sum.txt que acompaña la iso.

alias checkiso='cat "$1"; md5sum "$2"'

y al ejecutar el alias daría por salida algo como:

$ checkiso ubuntu710.md5 ubuntu710.iso
a5884b2398f293e9d82a2812809000ac3
a5884b2398f293e9d82a2812809000ac3

De esta manera es más sencillo comparar la suma md5 y si hemos bajado correctamente la imagen iso antes de quemarla.

[Finalizando]
Hasta aquí vimos que el path, alias y las variables pueden ser muy útiles a la hora de administrar nuestro linux, ya que nos proveen atajos a comandos complicados o complejos.
Las posibilidades son infinitas.

fuente: www.preguntaslinux.org