Capítulo 19. Trabajar con la shell

Tabla de contenidos

19.1. Introducción al Bash
19.2. Derechos de usuario
19.3. Resumen de los comandos más importantes de Linux
19.4. El editor vi

Resumen

Si bien es verdad que el entorno gráfico de usuario para Linux ha ganado en popularidad en los últimos tiempos, también es cierto que no todas las necesidades diarias pueden ser cubiertas con unos cuantos clics del ratón. En estos casos la línea de comandos nos ofrece una gran flexibilidad y eficacia. En la primera parte de este capítulo se le explicará cómo manejar la shell Bash y, a continuación, el concepto de derechos de usuario en Linux. El capítulo concluye con una lista de los comandos más importantes y una introducción al editor de textos vi.

La posibilidad de trabajar mediante programas basados en texto resulta muy importante sobre todo en el caso de ordenadores Linux antiguos, los cuales a menudo no disponen de recursos suficientes para satisfacer las necesidades de hardware de algunos entornos gráficos. En estos casos se utilizan las consolas virtuales. Dispone de seis consolas virtuales en modo texto entre las que puede navegar con las combinaciones de teclas Alt-F1 a Alt-F6. La séptima consola está reservada para X11.

19.1. Introducción al Bash

En la barra de tareas encontrará el icono de un monitor con una concha (shell). Al pulsar sobre este icono se abrirá la ventana de la consola en la que puede introducir comandos. La ventana que aparece es un intérprete de comandos; normalmente se trata del intérprete Bash (Bourne again shell). El Bash fue desarrollado en el marco del proyecto GNU . Cuando abra el Bash, verá en la primera línea el llamado prompt o símbolo de espera de órdenes que normalmente se compone del nombre de usuario, nombre de ordenador y de la localización actual en el árbol de directorios (ruta o path). También puede ser configurado de forma individual. Cuando el cursor se encuentre detrás de este prompt, podrá introducir comandos directamente.

19.1.1. Comandos

Los comandos se componen de distintos elementos. En primer lugar se debe introducir siempre la palabra de comando y seguidamente los parámetros u opciones. Los comandos se ejecutan sólo cuando presiona Intro. Hasta ese momento podrá editar la línea de comandos sin ningún problema, añadir cualquier opción o corregir fallos. Uno de los comandos más utilizados es ls, que se puede usar sólo o con los llamados argumentos. Si sólo introduce ls en la consola, se le mostrará el contenido del directorio en el que se encuentra en ese momento.

Las opciones van precedidas de un guión. Si introduce el comando ls -l, podrá ver el contenido del mismo directorio, sólo que de forma detallada. Verá, además del nombre del archivo, la fecha en que se creó, el tamaño del archivo en bytes y otras características que explicaremos más adelante. Una de las opciones más importantes que también está disponible para muchos otros comandos es --help. Si por ejemplo introduce ls --help, se visualizarán todas las opciones para el comando ls.

Con el comando ls puede ver también el contenido de otros directorios que no sean el actual. Introduzca, por ejemplo, ls -l Desktop y seguidamente verá el contenido del subdirectorio Desktop.

19.1.2. Archivos y directorios

Para trabajar de forma eficiente con la shell, debe conocer la estructura de archivos y de directorios en Linux. Los directorios son carpetas electrónicas en las cuales se pueden depositar archivos o programas así como subdirectorios. El directorio de mayor jerarquía es el directorio raíz, que se representa por /. Desde este directorio podremos acceder a todos los demás.

El directorio /home contiene los directorios personales en los que todos los usuarios dejan sus archivos. La Figura 19.1, “Árbol de directorios bajo Linux” muestra el árbol de directorios estándar de Linux con los directorios locales de los usuarios xyz, linux y tux. El árbol de directorios está ordenado por grupos funcionales según el estándar de jerarquía de sistemas de archivos. La siguiente tabla resume los directorios más típicos de Linux.

Figura 19.1. Árbol de directorios bajo Linux

Árbol de directorios bajo Linux
/

el directorio raíz (root directory), que es el punto de partida del árbol de directorios.

/home

los directorios (locales) de usuario.

/dev

archivos de dispositivos (device files) que representan componentes del hardware.

/etc

archivos importantes para la configuración del sistema.

/etc/init.d

scripts de arranque.

/usr/bin

comandos de acceso general.

/bin

comandos necesarios durante el arranque del sistema.

/usr/sbin

comandos reservados para el administrador del sistema.

/sbin

comandos reservados para el administrador del sistema y necesarios durante el arranque del sistema.

/usr/include

archivos de encabezamiento para el compilador de C.

/usr/include/g++

archivos de encabezamiento para el compilador de C++.

/usr/share/doc

diferentes archivos de documentación.

/usr/share/man

la ayuda en línea (manual pages).

/usr/src

fuentes del software del sistema.

/usr/src/linux

fuentes del kernel.

/tmp, /var/tmp

para archivos temporales.

/usr

contiene todas las aplicaciones.

/var

archivos de configuración (por ejemplo enlazados desde /usr).

/var/log

archivos de registro.

/var/adm

archivos para la administración del sistema.

/lib

librerías compartidas (para programas enlazados dinámicamente).

/proc

el sistema de archivos de los procesos.

/sys

(“system”) sistema de ficheros que alberga para el kernel toda la información sobre dispositivos.

/usr/local

extensiones locales, independientes de la distribución.

/opt

software opcional, paquetes grandes (por ejemplo KDE, GNOME, Netscape).

19.1.3. Funciones del Bash

Dos funciones importantes de la shell le simplificarán enormemente su trabajo:

El historial

Si desea volver a ejecutar una orden que ya haya introducido previamente, basta con pulsar la tecla hasta que aparezca el comando deseado. Si el comando que busca se encuentra delante de su posición actual pulse la tecla . También puede editar la línea de comando si desea modificar la orden. Desplácese con ayuda de las teclas del cursor hasta el sitio deseado y comience a editar el comando. Utilice Ctrl-R para buscar en el historial.

Expansión

Esta función completa el nombre de un archivo del cual sólo se han introducido las primeras letras, en caso de que este pueda ser identificado de forma inequívoca. Para ello pulse la tecla Tab. En caso de que haya más de un archivo que empiece con esas letras, obtendrá una lista de todos estos archivos pulsando dos veces seguidas la tecla Tab.

19.1.3.1. Ejemplo: trabajar con archivos

Ahora que ya sabe cómo se estructura un comando, qué directorios existen en SUSE LINUX y cómo puede simplificar un poco el trabajo con el Bash, haremos un pequeño ejercicio para que pueda poner en práctica estos conocimientos:

  1. Abra una consola en KDE pulsando sobre el icono del monitor y la concha.

  2. Introduzca el comando ls que le mostrará el contenido de su directorio local.

  3. Cree un nuevo subdirectorio con mkdir (make directory) llamado prueba. Para ello introduzca: mkdir prueba.

  4. Inicie el editor Kate pulsando las teclas Alt-F2 e introduciendo kate en la casilla de texto, lo que provocará que se abra una nueva ventana. Escriba un par de letras y grabe el archivo con el nombre Archivoprueba con una A mayúscula, puesto que Linux diferencia entre mayúsculas y minúsculas.

  5. Ahora mire nuevamente el contenido de su directorio. Pero esta vez, en lugar de volver a introducir el comando ls, pulse dos veces seguidas sobre la tecla . A continuación volverá a ver ls en la línea de comandos, y sólo tendrá que pulsar sobre la tecla Intro para volver a ejecutarlo. Ahora verá el nuevo subdirectorio prueba en color azul y el Archivoprueba en color negro, puesto que los directorios siempre vienen indicados en azul y los archivos en negro.

  6. Con el comando mv move, podemos ahora mover el Archivoprueba al subdirectorio prueba. Para facilitar el trabajo, use la función expansión: escriba mv A y pulse la tecla del tabulador. Si no existe ningún otro archivo que comience con esa inicial, la shell le mostrará la cadena Archivoprueba; en caso contrario, debe introducir más letras y confirmar con la tecla del tabulador. Deje un espacio en blanco después de la primera secuencia (mv Archivoprueba), escriba prueba y pulse Intro.

  7. Si ahora ejecuta el comando ls, ya no se mostrará el Archivoprueba.

  8. Para comprobar que se ha producido la modificación, vaya al directorio prueba con el comando cd prueba. Escriba ls; ahora debe aparecer el Archivoprueba. Con el comando cd (change directory) siempre puede volver a su directorio local.

  9. Si necesita una copia del archivo, utilice el comando cp (copy). Para copiar Archivoprueba en Archivoseguridad, escriba cp Archivoprueba Archivoseguridad. Para ver ambos archivos, ejecute ls.

19.1.4. Indicación de la ruta

Para trabajar con archivos o directorios siempre debe indicar la ruta correcta. Para ello no siempre es necesario que indique la ruta completa (absoluta) desde el directorio raíz hasta el archivo deseado. Puede hacerlo desde el directorio en el que se encuentre actualmente. Además, puede dirigirse a su directorio personal (home) con ~. Esto significa que dispone de varias formas de mostrar el archivo Archivoprueba en el directorio prueba: ruta relativa con ls prueba o ruta absoluta con ls ~/prueba.

Para ver los directorios personales de otros usuarios, escriba ls ~ seguido del nombre de usuario. En la estructura de directorios presentada como ejemplo existía el usuario ficticio tux. Con el comando ls ~tux puede ver el contenido del directorio personal del usuario tux.

El directorio actual se representa con un punto y el directorio inmediatamente superior, con dos. Así, escribiendo ls .. se le muestra el contenido del directorio superior del actual directorio; con ls ../.. se sube dos escalones en la jerarquía de directorios.

19.1.4.1. Ejemplo: el trabajo con rutas

Este otro ejemplo le aclarará cómo moverse por la estructura de directorios de su sistema SUSE LINUX.

  • Para estar seguro de que se encuentra en su directorio personal, introduzca cd en la consola. Aquí tiene el subdirectorio prueba. Ahora creará un subdirectorio adicional con el nombre prueba2. Introduzca para ello el comando mkdir prueba2.

  • Cambie de ubicación a prueba2 con el comando cd prueba2 y cree allí un nuevo directorio de nombre Subdirectorio. Cambie a este utilizando la función expansión: es decir, escriba sólo cd Su y pulse la tecla Tab. El resto de la palabra será añadida automáticamente.

  • Ahora se encuentra en Subdirectorio. A continuación moveremos el archivo Archivoseguridad creado anteriormente a este directorio. Para ello, no hace falta que se desplace de nuevo al directorio prueba; bastará con introducir la ruta relativa al archivo deseado. Deberá introducir el siguiente comando: mv ../../prueba/Archivoseguridad . (no se olvide del punto final ya que de esa manera define el directorio actual como destino final para el comando mv). Con cada dos puntos accederá a un nivel superior en la estructura de directorios, por lo que en este caso ../.., hace referencia a su directorio personal.

19.1.5. Comodines

Otra ventaja de la shell son los llamados comodines o wildcards.

?

Sustituye exactamente un carácter.

*

Sustituye una cantidad cualquiera de caracteres.

[set]

Reemplaza sólo un carácter de los que forman la secuencia de caracteres escrita entre corchetes, aquí representado con la cadena de caracteres set.

[!set]

Representa sólo un símbolo cualquiera, exceptuando los incluidos en la cadena set.

Supongamos que tiene en su directorio prueba los archivos Archivoprueba, Archivoprueba1, Archivoprueba2 y archiPrueba. En este caso, con el comando ls Archivoprueba? se le mostrarán los archivos: Archivoprueba1 y Archivoprueba2. Con ls Archivo* se le enseñará también el archivo Archivoprueba.

Con ls *chi* obtendrá todos los archivos de prueba. Mientras que con el comodín set puede pedir que se muestre sólo los archivos que terminen por un número: ls Archivoprueba[1-9].

El más poderoso siempre es el comodín *. Con él se puede, por ejemplo, copiar todos los archivos de un directorio en otro, o bien borrarlos. Así, el comando rm *pru* borraría de su directorio prueba todos los archivos que contuvieran en su nombre la secuencia de caracteres pru.

19.1.6. Menos es más

Dos pequeños programas le permiten visualizar archivos de texto directamente en la shell. Por tanto, no necesita abrir primero un editor si quiere leer, por ejemplo, un archivo llamado Leame.txt. Tan sólo tiene que introducir el comando: less Leame.txt. De esa forma podrá visualizar el texto en la ventana de la consola. Con la barra espaciadora puede avanzar de página en página y con las teclas Re. Pág. y Av. Pág. puede moverse en el texto hacia adelante y hacia atrás. Para terminar less utilice la tecla q.

El nombre less tiene su origen en el dicho a veces menos es más. El programa less no sólo se puede usar para ver archivos de texto, sino que también puede servir para ver cómodamente la salida de comandos. Esto se explicará en la Sección 19.1.7, “Desvíos”.

Además de less puede usar también el programa more, algo más antiguo y que resulta un poco menos cómodo, ya que con él no puede hojear el texto.

19.1.7. Desvíos

Normalmente la salida estándar de la shell es la pantalla (o bien la ventana de la shell) y la entrada estándar es el teclado. Para desviar la salida de un comando a un programa como less, tiene que utilizar una tubería (pipe).

Para ver los archivos dentro del directorio prueba, introduzca el comando ls prueba | less. Para obtener el símbolo |, pulse simultáneamente AltGr y la tecla con el signo de exclamación (!) y el número uno (1). Este procedimiento vale para la distribución de teclado de España y no necesariamente para el teclado latinoamericano. La consola muestra ahora el contenido del directorio prueba utilizando less. Esto sólo es razonable si la lista del contenido del directorio no cabe en la ventana. Por ejemplo, con el comando ls /dev sólo puede ver algunos de los archivos en ese directorio, mientras que ls /dev | less permite visualizar todo.

Para grabar la salida de un comando en un archivo, el comando equivalente sería: ls test > contenido. El resultado es un archivo nuevo con el nombre contenido, que contiene el listado de los archivos y directorios en prueba. Mediante less contenido es posible visualizar el archivo.

Por otra parte es posible utilizar un archivo como entrada a un comando. Por ejemplo puede ordenar alfabéticamente las líneas que haya escrito en el archivo de prueba mediante sort < Archivoprueba. La salida de este comando aparece en la pantalla y se ve el texto anteriormente escrito ordenado según las letras iniciales de cada línea. Esto sirve por ejemplo para ordenar una lista de nombres.

Para crear un archivo nuevo con la lista ordenada hay que desviar el resultado del comandosort a un archivo nuevo. Para realizarlo, puede crear en un editor una lista no ordenada y grabarla bajo el nombre lista en el directorio prueba. Entre al directorio prueba y ejecute el comando sort < lista > ListaOrdenada. Visualice la lista nueva con less.

La salida estándar de errores es igualmente la pantalla. Pero si quiere desviarla a un archivo con el nombre Error, escriba 2> Error a continuación del comando. Si escribe >& Salida después de un comando, tanto la salida estándar como la salida de errores se guardarán en el archivo Salida. Si en lugar de un >, emplea dos >>, la salida se añadirá a un archivo existente.

19.1.8. Archivar y comprimir datos

Después de haber creado algunos archivos y directorios, veremos ahora el tema de archivar y comprimir datos. Supongamos que desea empaquetar todo el directorio prueba en un archivo, ya sea para guardarlo en un disquete como copia de seguridad o para enviarlo por correo electrónico. Para ello, use el comando tar tape archiver. Con tar --help puede ver todas las opciones de tar. A continuación, se aclararán las más importantes:

-c

create crear un archivo nuevo.

-t

table ver el contenido de un archivo.

-x

extract descomprimir un archivo.

-v

verbose ver todos los archivos en la pantalla durante el proceso de compresión.

-f

file con esta opción puede dar un nombre al archivo de empaquetamiento. Al comprimir, esta opción ha de introducirse en último lugar.

Para empaquetar ahora el directorio prueba con todos sus archivos y subdirectorios en un archivo con el nombre prueba.tar, necesitaremos en cualquier caso las opciones: -c y -f. Si queremos hacer un seguimiento del proceso de empaquetado usaremos también la opción -v. Con cd diríjase primero a su directorio personal, donde se encuentra el directorio prueba. Introduzca ahora el comando tar -cvf prueba.tar prueba. Vea después el contenido del archivo empaquetado con: tar -tf prueba.tar. A propósito, el directorio prueba con todos sus archivos y directorios no sufre ningún cambio y sigue estando en su disco duro. Para desempaquetar por completo el archivo, introduzca el comando: tar -xvf prueba.tar. No haga esto aún ya que antes comprimiremos el archivo para ahorrar espacio.

Para ello, se aconseja utilizar el famoso programa gzip. Introduzca: gzip prueba.tar. Si ahora ejecuta ls, verá que el archivo prueba.tar ha desaparecido y en su lugar existe otro archivo de nombre prueba.tar.gz. Este archivo es mucho más pequeño, y por lo tanto más apropiado para ser enviado por correo electrónico o para que quepa en un disquete.

Ahora proceda a desempaquetar el archivo en el directorio prueba2 creado anteriormente. Para ello, copie el archivo en el directorio prueba2 con el comando cp prueba.tar.gz prueba2. Introduzca seguidamente cd prueba2. Para descomprimir un archivo .tar.gz utilice gunzip. La orden que se debe ejecutar es: gunzip prueba.tar.gz, con lo que obtendrá nuevamente un archivo prueba.tar. Ahora sólo queda desempaquetar este archivo, para lo que puede añadir la opción -z al comando tar. Sería de la siguiente manera: tar -xvzf prueba.tar.gz. Con el comando ls puede comprobar que ahora tiene un nuevo directorio prueba con el mismo contenido que el directorio prueba que se encuentra en su directorio personal.

19.1.9. mtools

Los mtools son una serie de comandos con los que se puede trabajar en un sistema de archivos MS-DOS. Esto es relevante sobre todo para trabajar directamente con la disquetera. Como en MS-DOS, a la disquetera se la puede denominar a:. Los comandos reciben los mismos nombres que en MS-DOS, sólo que van precedidos de una m:

mdir a:

le muestra el contenido del disquete introducido en la disquetera a:.

mcopy Archivoprueba a:

copia el archivo Archivoprueba al disquete.

mdel a:Archivoprueba

borra Archivoprueba de a:

mformat a:

formatea los disquetes a alto nivel; para ello el disquete tiene que ser previamente formateado a bajo nivel con el comando fdformat /dev/fd0h1440 o estar ya formateado.

mcd a:

a: será su directorio actual.

mmd a:prueba

crea el subdirectorio prueba en el disquete.

mrd a:prueba

borra el subdirectorio prueba del disquete.

19.1.10. Hacer limpieza

En este curso intensivo ha aprendido los fundamentos más importantes del trabajo con la shell. Para que su directorio personal quede un poco más ordenado, puede borrar todos los directorios y archivos de prueba con los comandos rm y rmdir.


SUSE LINUX Manual de usuario 9.3