4. Breve introducción a la línea de comandos

La línea de comandos es la manera más directa de enviar comandos a su máquina. Si usa la línea de comandos de GNU/Linux, rápidamente verá que es mucho más potente y tiene más capacidades que las invitaciones (prompts) que puede haber usado con anterioridad. La razón de esto es que tiene un acceso directo, no sólo a todas las aplicaciones X, sino también a los miles de utilitarios en modo consola (en oposición al modo gráfico) que no tienen equivalente gráfico, o que no sería fácil acceder a todas las opciones y combinaciones posibles por medio de menús y botones.

Pero, admitámoslo, muchas personas necesitan un poquito de ayuda para poder empezar. La primera cosa a hacer, si está en el modo gráfico y todavía no está trabajando en modo consola, es iniciar un emulador de terminal. Acceda al menú principal y encontrará una cantidad de emuladores de terminal en el submenú Sistema+Terminales. Elija el que desea, por ejemplo Konsole o RXvt. Dependiendo de su interfaz de usuario, también puede tener un icono que lo identifica claramente en el panel (ver Figura 1.2, “El icono de la terminal en el panel de KDE”).

Figura 1.2. El icono de la terminal en el panel de KDE

El icono de la terminal en el panel de KDE

Lo que obtiene en realidad al iniciar este emulador de terminal es un shell. Este es el nombre del programa con el cual Usted interactúa. Se encontrará frente a la invitación:

[reina@localhost reina]$

Esto supone que su nombre de usuario es reina y que el nombre de su máquina es localhost (este es el caso si su máquina no es parte de una red existente). Todo lo que aparece después de la invitación es lo que tiene que teclear. Note que cuando Usted es root el signo $ de la invitación cambia por un signo # (esto sólo es válido con la configuración predeterminada, ya que puede personalizar todos estos detalles en GNU/Linux). El comando para “volverseroot cuando inició un shell como usuario no privilegiado es su:

[reina@localhost reina]$ su
# Ingrese la contraseña de root; (No aparecerá en la pantalla)
Password:
# exit (o Ctrl-D) lo devolverá a su cuenta de usuario no privilegiado
[root@localhost reina]# exit
[reina@localhost reina]$

Cuando Usted lanza el shell por primera vez normalmente se encontrará en su directorio personal. Para mostrar el directorio en donde se encuentra en este momento, ingrese el comando pwd (que significa Print Working Directory, Imprimir el directorio de trabajo):

$ pwd
/home/reina

A continuación veremos algunos comandos básicos que son muy útiles

4.1. cd: Cambiar de directorio (Change Directory)

El comando cd es exactamente el mismo que en DOS, con algunos extra. Hace justo lo que su acrónimo indica, cambiar el directorio de trabajo. Puede usar . y .., que significan respectivamente el directorio corriente y el directorio padre. Si ingresa cd solo, regresará a a su directorio personal. Si ingresa cd - será llevado al último directorio en el cual estuvo. Y, finalmente, puede especificar el directorio personal del usuario peter ingresando cd ~peter (~ sólo o seguido de / significa el directorio personal suyo). Note que como usuario no privilegiado normalmente no puede ingresar a los directorios personales de otros usuarios (a menos que esos usuarios lo hayan autorizado explícitamente o esa sea la configuración predeterminada del sistema), excepto si Usted es root, entonces sea root y practique:

$ su -
# pwd
/root
# cd /usr/share/doc/HOWTO
# pwd
/usr/share/doc/HOWTO
# cd ../FAQ-Linux
# pwd
/usr/share/doc/FAQ-Linux
# cd ../../../lib
# pwd
/usr/lib
# cd ~peter
# pwd
/home/peter
# cd
# pwd
/root

Ahora, vuelva a ser un usuario no privilegiado tecleando exit y presionando la tecla Intro (o simplemente presionando las teclas Ctrl-D).

4.2. Algunas variables de entorno y el comando echo

Todos los procesos tienen sus variables de entorno y el shell le permite verlas directamente con el comando echo. Algunas variables interesantes son:

  1. HOME: esta variable de entorno contiene una cadena de caracteres que representa la ruta a su directorio personal.

  2. PATH: esta variable contiene la lista de todos los directorios en los cuales el shell busca los ejecutables cuando Usted ingresa un comando. Note que predeterminadamente, a diferencia de DOS, el shell ¡no buscará los comandos en el directorio corriente!

  3. USERNAME: esta variable contiene una cadena que representa su nombre de conexión.

  4. UID Contiene su identificador de usuario (UID).

  5. PS1: determina cómo se mostrará la invitación, y generalmente es una combinación de secuencias especiales. Puede leer la página de manual de bash(1) (página Man) para más información ingresando el comando man bash en una terminal.

Para hacer que el shell muestre el valor de una variable, debe anteponer al nombre de la misma un $. Aquí, el comando echo lo ayudará:

$ echo Hola
Hola
$ echo $HOME
/home/reina
$ echo $USERNAME
reina
$ echo Hola $USERNAME
Hola reina
$ cd /usr
$ pwd
/usr
$ cd $HOME
$ pwd
/home/reina

Como puede ver, el shell substituye el valor de la variable antes de ejecutar el comando. De no ser así nuestro ejemplo cd $HOME no hubiese funcionado. De hecho, el shell primero ha reemplazado $HOME por su valor (/home/reina) por lo que la línea se convirtió en cd /home/reina, que es lo que queríamos. Lo mismo ocurrió con el ejemplo echo $USERNAME.

[Sugerencia]Sugerencia

Si una de sus variables de entorno no existe, la puede crear temporalmente tecleando export NOMBRE_VARIABLE_ENTORNO=valor. Una vez que hizo esto, puede verificar que ha sido creada:

$ export USERNAME=reina
$ echo $USERNAME
reina

4.3. cat: mostrar el contenido de uno o más archivos en la pantalla

No hay mucho más que decir, este comando simplemente hace eso: mostrar el contenido de uno o más archivos en la salida estándar, normalmente la pantalla:

$ cat /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
/dev/hda2 / ext3 defaults 1 1
/dev/hdc /mnt/cdrom auto umask=0022,user,iocharset=utf8,noauto,ro,exec,users 0 0
none /mnt/floppy supermount dev=/dev/fd0,fs=ext2:vfat,--,umask=0022,iocharset=utf8,sync 0 0
none /proc proc defaults 0 0
/dev/hda3 swap swap defaults 0 0
$ cd /etc
$ cat modprobe.preload
# /etc/modprobe.preload: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a `#', and everything on the line after them are ignored.
# this file is for module-init-tools (kernel 2.5 and above) ONLY
# for old kernel use /etc/modules

nvidia-agp
$ cat shells
/bin/bash
/bin/csh
/bin/sh
/bin/tcsh

4.4. less: un paginador

Su nombre es un juego de palabras relacionado al primer paginador existente bajo UNIX®, que se denominaba more[2]. Un paginador es un programa que permite al usuario ver archivos largos página por página (o, más precisamente, pantalla por pantalla). Hablamos más de less que de more porque su uso es mucho más intuitivo. Utilice el comando less para ver archivos grandes que no entran en una pantalla. Por ejemplo:

less /etc/termcap

Para navegar por el archivo, use las teclas de las flechas para arriba y para abajo. Utilice Q (por quit, salir) para salir del programa. En realidad, less puede hacer mucho más que eso. De hecho, simplemente presione H para la ayuda (en inglés) acerca de las varias opciones disponibles.

4.5. ls: listar archivos

El comando ls (LiSt, LiStar) es equivalente a dir de DOS, pero puede hacer mucho más. De hecho, esto se debe en gran parte al hecho de que los archivos también pueden hacer más. La sintaxis del comando ls es la siguiente:

ls [opciones] [archivo|directorio] [archivo|directorio...]

Si no se especifica archivo o directorio alguno en la línea de comandos, ls mostrará la lista de los archivos del directorio corriente. Sus opciones son muchas y sólo citaremos unas pocas:

  1. -a: lista todos los archivos, incluyendo los archivos ocultos (en UNIX® los archivos ocultos son aquellos cuyo nombre comienza con un “.”); la opción -A lista “casi” todos los archivos, lo que significa que se mostrarán todos los archivos que mostraría la opción -a excepto “.” y “..

  2. -R: lista recursivamente, es decir, todos los archivos y subdirectorios del directorio que se menciona en la línea de comandos.

  3. -h: si se muestra el tamaño del archivo, se muestra en un formato más legible, junto a cada archivo. Esto significa que verá que los tamaños de los archivos usan sufijos como “K”, “M” y “G”, por ejemplo “234K” y “132M”. Por favor, note también que los tamaños se muestran como potencias de 2, y no como potencias de 10. Esto significa que 1K es en realidad 1024 bytes en vez de 1000 bytes.

  4. -l: muestra información adicional sobre los archivos tales como los permisos asociados al mismo, el dueño y el grupo dueño, el tamaño del archivo y la fecha de última modificación.

  5. -i: muestra el número de i-nodo (el número único del archivo en el sistema de archivos, consulte Capítulo 4, El sistema de archivos de Linux) junto a cada archivo.

  6. -d: trata a los directorios de la línea de comandos como si fueran archivos normales en vez de listar su contenido.

Algunos ejemplos:

  • ls -R: lista recursivamente el contenido del directorio corriente;

  • ls -ih images/ ..: lista los archivos en el directorio images/ y en el directorio padre del corriente, e imprime, para cada archivo, su número de i-nodo y su tamaño en formato más legible.

  • ls -l images/*.png: lista todos los archivos del directorio images/ cuyo nombre termina con .png, incluyendo al archivo .png si es que existe.

4.6. Atajos de teclado útiles

Hay una cantidad de atajos de teclado disponibles, cuya principal ventaja es que Usted ahorrará muchísimo tiempo de tecleo. Esta sección asume que está utilizando el shell predeterminado provisto con Mandriva Linux: bash, pero estas secuencias de tecleo también deberían funcionar con otros shells.

Primero: las teclas de las flechas. bash mantiene un historial de los comandos que ingresó previamente, el cual puede verse con las teclas de las flechas para arriba y para abajo. Se puede remontar hasta un número de líneas definido en la variable de entorno HISTSIZE. Es más, el histórico es persistente de una sesión a otra, por lo que no va a perder los comandos que ingresó en una sesión previa.

Las teclas de las flechas izquierda y derecha mueven el cursor hacia la izquierda y hacia la derecha en la línea corriente, por lo que puede editar sus comandos. Pero hay más en materia de edición que simplemente moverse un caracter a la vez: Ctrl-A y Ctrl-E, por ejemplo, lo llevarán al comienzo y al final, respectivamente, de la línea corriente. Las teclas Retroceso[3] y Supr funcionan como se espera. Ctrl-K borrará toda la línea desde la posición del cursor hasta el final de la misma, y Ctrl-W borrará la palabra delante del cursor (al igual que Alt-Retroceso).

Teclear Ctrl-D en una línea en blanco le permitirá cerrar la sesión corriente, lo cual es mucho más corto que tener que teclear exit. Ctrl-C interrumpirá el comando en curso de ejecución, excepto si se encuentra en el proceso de editar su línea de comandos, en cuyo caso interrumpirá la edición y lo devolverá a la invitación. Ctrl-L borra la pantalla. Ctrl-Z detiene temporalmente una tarea, la suspende. Este atajo es muy útil cuando Usted se olvida de teclear el caracter “&” luego de teclear un comando. Por ejemplo:

$ xpdf
    MiDocumento.pdf

Por lo tanto no puede utilizar más el shell ya que la tarea en primer plano se asigna al proceso xpdf. Para poner esa tarea en segundo plano y restaurar su shell, simplemente teclee Ctrl-Z y luego ingrese el comando bg.

Finalmente, están Ctrl-S y Ctrl-Q: estas secuencias de teclas sirven, respectivamente, para suspender y reanudar el flujo de caracteres sobre una terminal. No son muy usadas, pero sin embargo, puede ocurrir que teclee Ctrl-S por error (después de todo, S y D están muy cerca una de la otra en el teclado...). Entonces, si presiona las teclas pero no ve aparecer caracter alguno en la terminal, primero intente Ctrl-Q y preste atención: aparecerán en la pantalla todos los caracteres juntos que ingresó entre el Ctrl-S no deseado y Ctrl-Q.



[2] less” significa “menos”, y “more” significa “más

[3] Retroceso es la última tecla de la fila que contiene las teclas de los números.