Usando El Programa Terminal Del Sistema X Window

download Usando El Programa Terminal Del Sistema X Window

of 55

Transcript of Usando El Programa Terminal Del Sistema X Window

Usando el programa Terminal del sistema X WindowDe BibliaubuntuSaltar a navegacin, bsqueda Cualquier sistema X Window incluye una aplicacin de terminal muy liviana, conocida como xterm. El ejecutable est ubicado en /usr/bin/xterm y podemos ver su ventana en la figura 6.3.

Figura 6.3 El tradicional xterm Para ejecutar la aplicacin xterm puedes hacer lo siguiente:

Aadir un elemento de men para la aplicacin xterm, como se explic en Personalizando mens del captulo 5, y luego seleccionar ese elemento de men. Crear un lanzador sobre el panel para la aplicacin xterm utilizando la miniaplicacin "Ejecutar una aplicacin...". El cmo aadir elementos al panel se explic en la seccin Personalizando los paneles del captulo 5. Crear un lanzador de la aplicacin xterm sobre el escritorio. Pulsa sobre el fondo del escritorio con el botn derecho del ratn, escoge la opcin "Crear un lanzador...", y rellena los datos del cuadro de dilogo de la figura 6.4. Podrs iniciar xterm al pulsar dos veces seguidas sobre el icono del lanzador. Pulsando Alt+F2, aparecer la ventana de "Ejecutar una aplicacin". Tecleamos "xterm" y luego intro, o pulsamos sobre "Aceptar". Ejecutar un comando xterm directamente desde el Terminal de GNOME. Es un poco tonto, pero perfectamente posible.

Muchos usuarios para los que Ubuntu es nuevo pero que ya conocen xterm puede que lo prefieran antes que al Terminal de GNOME. Para una lista completa de todas las posibilidades de xterm, consulta su pgina del manual. Por ejemplo ejecutando xterm y tecleando en su ventana el comando man xterm.

Figura 6.4 Creacin de un lanzador para la aplicacin xterm. Un lanzador ubicado en el escritorio Como es una aplicacin genrica para X Window y no para GNOME ni para KDE, observars en la figura 6.3 que la ventana de xterm no tiene un men o barra de herramientas que facilite el acceso a sus comandos de configuracin. En vez de eso, puedes dejar pulsada la tecla Control de tu teclado y pulsar el botn izquierdo, derecho o central de tu ratn cuando el puntero est situado sobre la ventana de xterm. La figura 6.5 muestra el men que aparece pulsando Control y el botn izquierdo del ratn sobre la ventana de xterm.

Comandos populares de la Lnea de ComandosDe BibliaubuntuSaltar a navegacin, bsqueda

En secciones anteriores estuvimos presentando las utileras de lnea de comandos, sus opciones y argumentos, utilizando el comando ls como ejemplo. El listar ficheros y directorios es una de las operaciones ms frecuentes que un usuario suele querer hacer desde una shell (o, al menos, es lo que encontrars que te ves hacer en la mayora de las ocasiones). Sin embargo, Ubuntu nos provee con una numerossima coleccin de comandos, cientos, tantos que no podramos tratar sobre todos ellos a menos que este wiki estuviese funcionando sobre la base de datos de Google ;-) Ciertamente, hay algunas tareas ms tiles y frecuentes que otras. Esta seccin nos ilustrar sobre algunas de las tareas ms comunes que querrs efectuar desde la lnea de comandos, y concluye

tratando de cmo deducir los comandos a utilizar si an no conoces sus enigmticos nombres.

Figura 6.5 El men "Main Options" de xterm Cada botn del ratn muestra un men diferente de configuracin:

Control-Botn izquierdo: Muestra el men Main Options (Opciones principales), que bsicamente te habilita para enviar seales y secuencias de teclas especiales a tu xterm. Control-Botn central: El men VT Options te permite establecer varias propiedades de la emulacin de terminal de xterm. El nombre VT procede del nombre del tipo de terminal emulado de forma predeterminada por xterm: un terminal DEC VT-100. La figura 6.6 muestra el men VT Options. Si tu ratn no dispone de botn central, pulsa el botn izquierdo y el derecho al mismo tiempo para simular al central. Control-Botn derecho: El men Fonts (fuentes o tipos de letra) permite controlar el tamao de los tipos de letra que utiliza xterm. Puedes verlo en la figura 6.7.

CONSEJO

Por defecto, xterm empieza con una copia de tu shell de ingreso, pero una de las utilizaciones ms comunes consiste en iniciar automticamente otra aplicacin en la ventana xterm usando la opcin -e (ejecutar) de xterm. Por ejemplo, el siguiente comando inicia un xterm que a su vez inicia un comando ssh para conectarse remotamente (usando un protocolo cifrado) al sistema seguro.ubuntu.com:$ xterm -e ssh seguro.ubuntu.com

Este comando podra mostrar un aviso para introducir una clave, y seguidamente mostrar un shell que estara funcionando sobre el sistema seguro.ubuntu.com (para ms informacin, consulta el Captulo 15: Conectandose a otros sistemas). Ya que los terminales xterm no disponen de la posibilidad de varias solapas como s tiene el Terminal de GNOME, el ejecutar xterm -e es la forma ms usual en Ubuntu de iniciar una ventana separada que ejecute otro comando.

Figura 6.6 El men VT Options de xterm.

Figura 6.7 El men Fonts de xterm.

Movindonos por el sistema de archivos de LinuxDe BibliaubuntuSaltar a navegacin, bsqueda

Al utilizar la lnea de comandos, de igual manera que cuando utilizas un interfaz grfico, querrs colocar tus ficheros y directorios con algn tipo de organizacin que tenga cierta lgica. Una vez que hayas organizado todo de esa manera, necesitars utilizar el comando cd (cambiar directorio) que hace exactamente lo que su nombre indica. En palabras ms tcnicas, el comando cd cambia tu directorio actual para que sea el que le has proporcionado como argumento. Por ejemplo, para cambiar tu directorio actual a otro directorio llamado pruebas_ubuntu deberas teclear:$ cd pruebas_ubuntu

NOTA

Si tienes cerca a gente muy metida en estos temas, es posible que utilicen otras expresiones para referirse a esto mismo, incluso es posible que te hablen en espanglish cuando no sepan expresarlo en espaol, multiplicando

tu confusin.

Si no sabes el nombre del directorio en el que ests puedes sentirte algo temeroso e inseguro, pero puedes usar el comando pwd (process working directory=proceso para llegar al directorio de trabajo) para que te muestre esa informacin. El comando pwd lista la ruta completa hasta el directorio en el que el programa actual (en este caso, tu shell) se est ejecutando. Veamos el siguiente ejemplo:$ pwd /home/bibliaubuntu/pruebas_ubuntu

Puedes cambiar el directorio actual por cualquier otra ruta dentro de tu sistema Linux, especificando la ruta completa como argumento del comando cd:$ cd /usr/local $ pwd /usr/local

Como puedes ver, mi shell ahora est funcionando sobre el directorio /usr/local y cualesquiera otros comandos que ejecute tendrn efecto sobre ese directorio. Un detalle muy conveniente es que si tecleas el comando cd sin argumentos, entender que quieres cambiarte a tu directorio personal (que normalmente es el lugar donde tendrs la mayor parte de tus ficheros y directorios). Ejemplo ilustrativo:$ pwd /usr/local $ cd $ pwd /home/bibliaubuntu

CONSEJO

Al trabajar en la lnea de comandos te encontrars a menudo cambiando de directorio para hacer una o dos cosas y luego volver al directorio donde estabas. Cuando cambias de directorio con frecuencia es muy til que tu shell recuerde dnde estaba situado. Para ahorrar tiempo y energas mentales, la mayor parte de los shells de Linux incluyen los comandos pushd y popd con ese propsito. El comando pushd te cambia al directorio especificado, pero recuerda en qu ruta estabas ubicado al poner esa ruta en una lista de ubicaciones previas. Esa lista est organizada como una pila de datos. Una vez que hayas hecho lo que tuvieras que hacer, puedes teclear el comando popd para retornar al directorio desde el que viniste, y lo elimina de la pila (ya no necesitamos acordarnos de l para volver, hemos vuelto). Si no tienes claro a qu nos referimos con una pila, no tienes ms que pensar en un montn de platos limpios apilados en el fregadero del tu

bar habitual. Poner otra ruta en la pila de rutas con pushd se hace de forma anloga a colocar un nuevo plato limpio sobre la pila de platos. Eliminar una ruta con popd es anlogo a quitar el plato superior de la pila. As, el siguiente plato/ruta estar disponible para su uso.

Copiando, moviendo, renombrando y borrando archivos y directoriosDe BibliaubuntuSaltar a navegacin, bsqueda

Cualquier usuario de computadoras, tarde o temprano, debe copiar, mover o renombrar algn fichero. Independientemente de que utilice la lnea de comandos o algn interfaz grfico. Tanto si ests clonando un fichero existente para utilizarlo como punto de partida de un nuevo trabajo, como si ests reorganizando tus ficheros y directorios para hacerlos ms fciles de encontrar, el copiado y traslado de ficheros y directorios es tan fcil de hacer mediante la lnea de comandos como lo es con la interfaz grfica, obviando el hecho de que debes teclear en vez de apuntar y pulsar. En muchos casos, las tropecientas opciones que te ofrecen los comandos de Linux te dan un control ms preciso sobre operaciones en las que un interfaz grfico genrico no puede alcanzar tanto detalle. Continuando con la tradicin Unix/Linux de "no teclear jams ms letras que las necesarias", el comando que se usa para copiar ficheros y directorios es el comando cp. Para copiar un fichero hacia otro, simplemente ejecuta el comando cp, seguido por el nombre del fichero existente, y luego el nombre del fichero que va a ser el destinatario de la copia. Por ejemplo, para copiar un fichero llamado fichero.txt hacia el nuevo fichero llamado nuevo_fichero.txt, deberas teclear:$ cp fichero.txt nuevo_fichero.txt

ATENCIN!

Ten muchsimo cuidado cuando teclees el nombre del fichero destinatario del comando cp. Si existe otro fichero con ese mismo nombre, el comando cp lo sobreescribir con el contenido del fichero que ests copiando, y perders el contenido previo de ese fichero. Si te preocupan los peligros de este asunto, hay una seccin en este captulo titulada Definiendo y usando alias para saber cmo configurar una versin segura del comando cp.

Al especificar las rutas completas del fichero origen y/o del destino, el comando cp puede copiar fichero hacia cualquier parte de tu sistema (siempre que tengas los permisos adecuados para ello, se entiende). Por ejemplo, para copiar el fichero fichero.txt de mi directorio personal hacia el fichero nuevo_fichero.txt del directorio

/tmp (en el que todos los usuarios tienen permisos de creacin de ficheros), podra ejecutar con xito el siguiente comando independientemente de cul fuera mi directorio actual.$ cp /home/bibliaubuntu/fichero.txt /tmp/nuevo_fichero.txt

Tambin puedes utilizar cp para copiar un fichero a directorios diferentes, simplemente tecleando el nombre del directorio como destinatario del copiado. Continuando con el ejemplo anterior, he quediro copiar el fichero fichero.txt desde mi directorio personal hacia /tmp, pero de forma que el fichero copiado tenga el mismo nombre que el fichero original. Podra hacerlo con el comando:$ cp /home/bibliaubuntu/fichero.txt /tmp

que creara el fichero /tmp/fichero.txt como una copia exacta del /home/bibliaubuntu/fichero.txt. El comando cp no exige opciones especiales para la copia de ficheros. Sin embargo, tambin puedes copiar directorios completos con l especificando la opcin -r (recursivo). Para copiar un directorio mis_datos y todo su contenido hacia un nuevo directorio llamado copia_de_respaldo:$ cp -r mis_datos copia_de_respaldo

Tardar ms o menos dependiendo del nmero de ficheros que tengas en el directorio mis_datos. Cuando termine, el nuevo directorio contendr una copia exacta de mis_datos. Si eres tan incrdulo como Santo Toms y necesitas pruebas de cmo va haciendo cada paso, puedes aadir la opcin -v (verboso) para mostrar cada uno de los pasos hechos durante la copia.$ cp -rv paquetes/frozen_bubble/ /tmp `paquetes/frozen_bubble/' -> `/tmp/frozen_bubble' `paquetes/frozen_bubble/frozen-bubble-1.0.0-i486-4pin.tgz' -> `/tmp/frozen_bubble/frozen-bubble-1.0.0-i486-4pin.tgz' `paquetes/frozen_bubble/perl-sdl_perl-1.20.0-i486-2pin.tgz' -> `/tmp/frozen_bubble/perl-sdl_perl-1.20.0-i486-2pin.tgz'

Como era de esperar, un comando cp recursivo tambin copia recursivamente todos los subdirectorios y ficheros que contiene el objeto origen. Antes mencion que especificar el nombre de un directorio como destinatario de la copia de un fichero sirve para crear un fichero dentro de ese directorio y con el mismo nombre que el fichero origen. Lo mismo sirve cuando especificamos el nombre de un directorio como destino de un comando cp para una copia recursiva. Puede ser confuso al principio si ests intentando copiar un directorio hacia un directorio con un nuevo nombre existiendo previamente un directorio con ese mismo nombre. En ese caso, cp crea un directorio con el mismo nombre que tu directorio original, pero como subdirectorio del directorio destino. Mover y renombrar fichero desde la lnea de comandos es igual de fcil. Linux no dispone de un comando de renombrado separado. En Linux, el comando mv hace ambas funciones: mover ficheros y directorio hacia una nueva ubicacin, y opcionalmente

renombrarlos como parte de la operacin de mover. Por ejemplo, para renombrar el fichero fichero.txt como nuevofichero.txt se hara:$ mv fichero.txt nuevofichero.txt

La orden mv obedece a las mismas convenciones que cp sobre especificaciones de rutas completas y sobre especificar un directorio como nombre de la ubicacin hacia donde quieres mover el fichero. Por ejemplo, el siguiente comando mueve el fichero /home/bibliaubuntu/fichero.txt hacia el directorio /tmp, y lo renombra como nuevofichero.txt:$ mv /home/bibliaubuntu/fichero.txt /tmp/nuevofichero.txt

Si queras mover el fichero hacia /tmp manteniendo su nombre original, lo haras as:$ mv /home/bibliaubuntu/fichero.txt /tmp

A diferencia del comando cp, el comando mv no necesita opciones especiales para mover o renombrar directorios. Por ejemplo, para renombrar el directorio pruebas hacia copia_de_seguridad, teclearas lo siguiente:$ mv pruebas copia_de_seguridad

Igual que hace cp, si el directorio copia_de_seguridad ya exista, el comando mv movera el directorio pruebas hacia el interior de copia_de_seguridad, conservando su nombre anterior. El comando mv tambin dispone de una opcin -v (verboso) para mostrar qu est ocurriendo durante las operaciones que hace mv, pero es menos informativo cuando lo que haces es simplemente renombrar un directorio, como puedes ver en el ejemplo siguiente:$ mv -v pruebas copia_de_seguridad 'pruebas' -> 'copia_de_seguridad'

En este caso, mv slo necesita renombrar el directorio. Sin embargo, debido al modo que tiene Linux de crear sistemas de ficheros, el mover directorios de un sistema de ficheros a otro sistema de ficheros residente en particiones de disco diferentes exige que cada fichero y subdirectorio se copie antes de ser borrado por mv, como en el siguiente ejemplo:$ df . /media/pcsamba S.ficheros Bloques de 1K Usado Dispon Uso% Montado en /dev/hda3 19141396 5678852 12490212 32% / //servidor/compartido 51735552 33655808 18079744 66% /media/pcsamba $ mv -v prueba /media/pcsamba `prueba' -> `/media/pcsamba/prueba' `prueba/6-5.png' -> `/media/pcsamba/prueba/6-5.png' `prueba/6-1.png' -> `/media/pcsamba/prueba/6-1.png' `prueba/VirtualBox_1.3.8_Ubuntu_edgy_i386.deb' -> `/media/pcsamba/prueba/VirtualBox_1.3.8_Ubuntu_edgy_i386.deb' `prueba/6-0_info_commands.png' -> `/media/pcsamba/prueba/60_info_commands.png' `prueba/6-2.png' -> `/media/pcsamba/prueba/6-2.png' `prueba/6-4.png' -> `/media/pcsamba/prueba/6-4.png' `prueba/6-3.png' -> `/media/pcsamba/prueba/6-3.png'

`prueba/6-6.png' -> `/media/pcsamba/prueba/6-6.png' `prueba/6-7.png' -> `/media/pcsamba/prueba/6-7.png' `prueba/6-5.png' borrado `prueba/6-1.png' borrado `prueba/VirtualBox_1.3.8_Ubuntu_edgy_i386.deb' borrado `prueba/6-0_info_commands.png' borrado `prueba/6-2.png' borrado `prueba/6-4.png' borrado `prueba/6-3.png' borrado `prueba/6-6.png' borrado `prueba/6-7.png' borrado directorio borrado: `prueba'

Como puedes ver, la mayor parte de lo que hace mv es muy similar a lo que hace cp. En el ejemplo vemos cmo se usa el comando df para demostrar que el directorio actual (".") y el directorio destino (/media/pcsamba) estn situados en sistemas de ficheros (y ordenadores) diferentes. Puedes ver las diferencias en la salida de texto verbosa del comando mv. Igualmente que el copiar y mover, el borrar ficheros y directorios es una operacin muy frecuente. Sea porque ests eliminando cosas para liberar espacio en disco para proyectos futuros, sea porque ests eliminando respaldos o proyectos que ya finalizaste, sea porque quieres borrar informaciones que no quieres que nadie ms vea, es bastante fcil eliminar ficheros mediante la lnea de comandos. El comando necesario se llama rm. Puedes ver que seguimos con la filosofa de "cuanto menos se teclee, mejor", y es la abreviatura del ingls remove (eliminar, borrar). Para eliminar un fichero en Linux, simplemente teclea el comando rm seguido por el nombre del fichero. Por ejemplo:$ rm fichero.txt

Y adis al fichero. Igual que cp, el comando rm acepta la opcin -r (borrado recursivo) para que puedas eliminar directorios enteros. Por ejemplo, para eliminar permanentemente el directorio copia_de_seguridad, teclearas:$ rm -r copia_de_seguridad

CONSEJO

Puedes eliminar directorios vacos con el comando rmdir, aunque es una situacin poco frecuente. Es raro tener directorios vacos por ah porque normalmente cuando se crea un directorio es para guardar algo en l. Suelo utilizar el comando rm -r para borrar cualquier directorio, vaco o no, porque as no es necesario borrar a mano previamente su contenido. Hay gente para todo, as que decide el mtodo t mismo.

Si te has iniciado como usuario de Ubuntu procediendo de un sistema Microsoft Windows, puede que tengas algo de idea y sepas que es casi trivial recuperar ficheros borrados en Windows. Esto se debe a que Windows borra los ficheros eliminando la entrada de directorio que los identifica. No sucede as en Linux. Cuando borras un fichero o directorio en Linux, todo el espacio en disco asociado a ese fichero, directorio, y los contenidos de ese directorio, se devuelven a una lista general de espacio libre que tu sistema tiene disponible. Aunque en Linux se pueden recuperar los ficheros/directorios eliminados, es mucho ms difcil de hacer que en Windows y requiere ayuda de alguien que conozca de verdad los detalles internos del sistema de ficheros (recordemos que hay bastantes ms que en Windows y cada uno se gestiona internamente de una forma). El inconveniente de esto es que no puedes recuperar con facilidad los ficheros que hayas eliminado por error. Para ayudar a autoprotegerte de borrados accidentales, lee la seccin Definiendo y usando alias para saber cmo configurar de forma permanente una versin segura del comando rm que te pida confirmacin antes de eliminar algo.CONSEJO

Los comandos cp, mv y rm tienen muchas ms opciones que las tratadas aqu. Para ver todas ellas, utiliza los comandos man e info para ver todo el manual en lnea del comando que te interese conocer.

Cambiando permisos de archivo y directorioDe BibliaubuntuSaltar a navegacin, bsqueda El captulo 4 nos dio una idea sobre los grupos de usuario en Linux, y tambin nos dio un explicacin inicial sobre como los permisos de archivos y directorios estn representados cuando se listan los contenidos de los mismos. Anteriormente en este capitulo se poda ver esto cuando explorbamos la opcin -l del comando ls. Tener la posibilidad de proteger archivos de modo que solo ciertos usuarios puedan verlos o ejecutarlos es muy prctico, pero para poder hacerlo hay que saber cmo. Los permisos se pueden cambiar fcilmente usando una aplicacin grfica como Nautilus haciendo click derecho, seleccionando Propiedades y abriendo la pestaa de permisos, como se

muestra en la figura 6.8. Afortunadamente, cambiar los permisos desde la consola es igual de fcil, y tal vez hasta ms fcil.

Imagen 6.8, pestaa de permisos del cuadro de dilogo propiedades. El comando chmod nos permite cambiar los permisos de cualquier archivo o directorio y tiene dos maneras de uso:

Usando valores octales que representan bits y la casilla de permisos de un archivo o directorio. Ejemplo: chmod 0755 fichero.txt, asigna permiso 7 a usuario (lectura, escritura y ejecucin, permiso 5 al grupo (lectura y escritura), permiso 5 a otros (lectura y escritura). El 0 inicial son permisos adicionales especiales que no vamos a tratar ahora. Usando letras para representar los permisos para el usuario que posee el archivo o directorio (u), el grupo con el que el archivo esta asociado (g), otros usuarios en el sistema que no estn en el grupo (o), o todos los usuarios del sistema (a), y usando el signo ms (+) y menos (-) para aadir o quitar los permisos. Esto es conocido como cambiar permisos en modo simblico. Ejemplo: chmod chmod u+w fichero.txt agrega permisos de escritura al dueo (u=usuario dueo del archivo).

A continuacin se muestra una segunda manera de cambiar los permisos porque es un poco rstico trabajar en octal, y el modo simblico es mucho ms sencillo de ver y usar. Para el ejemplo, se van a modificar los permisos del archivo hola.sh, que es un shell script que imprime "Hola Mundo!" en la ventana de la shell en la que es ejecutado. Primero veamos sus permisos por defecto:

$ ls -l hola.sh -rw-r--r-- 1 malgia malgia 0 2007-04-28 14:43 hola.sh

Como se explic ms detalladamente en el captulo 4, los caracteres en la parte izquierda de la salida muestran los permisos actuales. Estos permisos estn divididos en cuatro grupos: el guin principal nos muestra el tipo de objeto que es (un guin quiere decir que es un archivo regular), y los tres grupos restantes de tres caracteres nos indican los permisos del dueo del archivo (malgia), de los grupos asociados al archivo (malgia), y los derechos que todos los usuarios tienen sobre el archivo. EN el ejemplo, se puede observar que el dueo puede leer y escribir, pero el grupo de usuarios y los otros usuarios pueden solo leerlo. Como este es un shell script, es necesario ejecutarlo, Para hacer esto, se tiene que digitar el siguiente comando:$ chmod u+x hola.sh

Mostrando los permisos de nuevo , podemos ver que ahora el archivo puede ser ejecutado por el dueo:$ls -al hola.sh -rwxr--r-- 1 malgia malgia 0 2007-04-28 14:43 hola.sh

Si quieres que otros usuarios del grupo y otros usuarios en general puedan ejecutarlo, se podran usar los siguientes comandos para realizar los cambios:$ chmod a+x hola.sh -rwxr-xr-x 1 malgia malgia 0 2007-04-28 14:43 hola.sh

Esto requiere de mucha escritura para una serie repetitiva de operaciones! Pero afortunadamente el comando chmod permite agrupar varias operaciones. Supongamos que queremos quitar la posibilidad de cualquier otra persona de ejecutar el script. Se podra por ejemplo usar el siguiente comando:$ chmod go-x hola.sh $ ls -l hola.sh -rwxr--r-- 1 malgia malgia 0 2007-04-28 14:43 hola.sh

Fjate que el comando usa o, que significa cualquier otra persona que no este en el grupo, esto es menor que a, ya que usando a todos los usuarios (incluyendo el dueo) no tendran permisos. Note Puedes aadir o quitar permisos de escritura o lectura para cualquier grupo usando el comando chmod y opciones similares a las anteriores. Los directorios se manejan de igual manera, pero con la diferencia de que al no poder ejecutar directorios esta opcin queda reservada para la bsqueda de archivos en el mismo. Por ejemplo puedes crear un directorio que solo tu puedas leer, pero sigue siendo posible que los dems usuarios ejecuten programas que estn ah aunque quites los permisos de lectura (r), por eso, para estar seguro hay que configurar bien los permisos de bsqueda (x). Los usuarios no podrn ver lo que esta ah, pero podrn ejecutarlo si conocen sus nombres exactos.

CONSEJO

Tambin puedes usar los comandos chown (cambiar dueo) y chggrp (cambiar grupo) para cambiar el dueo y el grupo de un archivo, pero esta es una operacin que se debe hacer usando sudo, y es una tarea relativamente rara a no ser que ests trabajando como administrador. La ayuda en lnea acerca de estos comandos provee varios buenos ejemplos de como usarlos

Encontrando comandos que hacen tareas especficasDe BibliaubuntuSaltar a navegacin, bsqueda

La lnea de comandos es un amigable lugar para ejecutar comandos si sabes lo que estas haciendo y como hacerlo. Desafortunadamente, debido a la tendencia de Linux de evitar comandos largos quitando ciertos caracteres de sus nombres, siempre es difcil encontrar cmo se escribe el comando que necesitas para realizar cierta tarea. Afortunadamente, el manual de comandos de linux, man, provee una conveniente opcin de bsqueda (-k) que automticamente busca cualquier palabra o frase. Por ejemplo, suponiendo que no sabes sobre chmod, y quieres saber la lista de comandos que tienen algo que ver con permisos de archivos, tu podras mirar comandos apropiados usando:$ man -k permissions chmod (1) - change file access permissions WWW::RobotRules (3pm) - database of robots.txt-derived permissions

Recuerda que esto puede ser dficil, debido a que al igual que en una bsqueda en la Web, tienes que encontrar la frase correcta. Sin embargo, la posibilidad de hacerlo siempre esta ah. Puedes buscar palabras simples o frases entrecomilladas para encontrar entre la lista de comandos el que ms te sirva. Si tu man -k muestra un comando pero t no lo puedes ejecutar (sale "comando no encontrado"), esto significa que el directorio donde el comando esta almacenado no es uno de los directorios en los cuales t buscas comandos. Si este es el caso, puedes usar el comando whereis para localizarlo, como se muestra en el siguiente ejemplo:$ man -k "volume"

dmsetup (8) - low level logical volume management gnome-eject (1) - Mount drives and volumes using HAL and read settings from the GNOME desktop configuration system gconf. gnome-mount (1) - Mount drives and volumes using HAL and read settings from the GNOME desktop configuration system gconf. gnome-umount (1) - Mount drives and volumes using HAL and read settings from the GNOME desktop configuration system gconf. gnome-volume-control (1) - manual page for Gnome gnome-volume-control 2.1.0 gnome-volume-manager (1) - GNOME daemon to auto-mount and manage media devices gnome-volume-properties (1) - configure the gnome-volume-manager daemon. Gnome2::VFS::Volume (3pm) - (unknown subject) Gnome2::VFS::VolumeMonitor (3pm) - (unknown subject) volname (1) - return volume name vumeter (1) - manual page for Gnome Volume Meter 2.1.0 $ man -k dmsetup dmsetup (8) - low level logical volume management gdmsetup (1) - The GNOME Display Manager $ whereis dmsetup dmsetup: /sbin/dmsetup /usr/share/man/man8/dmsetup.8.gz $ whereis gdmsetup gdmsetup: /usr/sbin/gdmsetup /usr/share/man/man1/gdmsetup.1.gz

El comando whereis te dice dnde ha localizado al comando (y dnde est su documentacin). Luego podras ejecutar el comando especificando toda la ruta del ejecutable, que un caso sera /sbin/dmsetup y en el otro /usr/sbin/gdmsetup.

Trabajando con la shell BASHDe BibliaubuntuSaltar a navegacin, bsqueda

Ahora que has iniciado una shell y aprendido algunos de los comandos que querrs ejecutar desde la lnea de comandos, es hora de explorar algunos aspectos fascinantes de cmo se trabaja con el intrprete de coamndos bash y cmo se configura. Obviamente, podras limitarte a teclear comandos en el prompt del shell y ser feliz como una lombriz, pero el shell bash provee algunas caractersticas encantadoras que hacen ms fcil el trabajo. Algunas de estas caractersticas pueden ahorrarnos una significativa cantidad de tiempo, cuando escribamos el mismo comando varias veces, cuando ejecutemos un grupo de comando similares, cuando escribamos comandos largos o nombres de archivo complejos como argumentos, y as sucesivamente.

Usando el historial de comandosDe BibliaubuntuSaltar a navegacin, bsqueda Todas las shells de Linux tienen un historial, que nos permite reejecutar comandos que se han ejecutado anteriormente. Para ver la lista de comandos recientes, puedes simplemente escribir history en la consola, lo que mostrara algo as:$ history [Parte de la lista fue borrada] 151 man -k permissions 152 whreis pvscan 153 whereis pvscan 154 man -k "physical volume" 155 man -k "physical" 156 man -k "volume" 157 man -k "volumen" 158 dmsetup 159 man -k "volumen" 160 man -k "volume" 161 whereis dmsetup 162 man -k dmsetup 163 whereis gdmsetup 164 history

El nmero de comandos almacenados en el historial est identificado por la variable de entorno HISTSIZE. (La seccin Usando variables de entorno ms adelante provee informacin acerca de cmo editar y mostrar los valores de las variables de entorno.) Hay varias maneras de re-ejecutar comandos:

Usando el comando fc, que viene incluido en el shell. Usando el mecanismo de la shell para interactuar con los comandos que has escrito desplazndote hacia atrs en el historial desde la lnea de comandos. Usando el signo de exclamacin para identificar el comando que quieres mostrar y re-ejecutar.

A continuacin vamos a centrar nuestra atencin sobre los dos ltimos mtodos. Puedes re-mostrar un comando ejecutado recientemente tecleando Control-p en cualquier consola. Cada vez que lo hagas, la shell muestra el comando anterior. Cuando lo encuentres y quieras re-ejecutarlo solo tienes que presionar Enter para ejecutarlo o puedes editarlo usando comandos como Control-b (hacia atrs, del ingls backwards) para moverte un carcter hacia atrs en el comando, Control-f (hacia adelante, del ingls forward) para moverte un carcter hacia adelante en el comando, la tecla borrar o suprimir para borrar el anterior o el siguiente carcter, y as sucesivamente. En el terminal de GNOME tambin puedes usar las teclas de cursor para desplazarte a derecha o izquierda.

Obviamente, si el comando que quieres re-ejecutar esta muy lejos en el historial, desplazarse hacia atrs cientos de comandos puede ser fastidioso. En este caso, puedes usar el signo de exclamacin para identificar un comando en particular aplicando uno de los siguientes mtodos:

Identificando un comando por su nmero de secuencia: Cada comando en el historial esta precedido por su nmero de secuencia. Si vez el historial y puedes encontrar el comando que deseas ejecutar, slo tienes que teclear el signo de exclamacin seguido del nmero. Por ejemplo, usando el historial mostrado anteriormente, el comando !155 re-ejecutara man -k "physical". Identificando un comando por su nombre: Puedes re-ejecutar el comando ms reciente que empieza con cierta letra escribiendo un signo de exclamacin seguido del nombre del comando. Por ejemplo, usando el historial mostrado anteriormente, el comando !where ejecutara whereis gdmsetup. CONSEJO

Si quieres re-mostrar un comando y editarlo antes de ejecutarlo, puedes usar el modificador de historial para imprimir el comando sin ejecutarlo. Luego puedes teclear Control-P para re-mostrarlo, editarlo, y luego presionar Enter para ejecutarlo Si has ejecutado varios comandos similares, puedes reducir la lista mostrada en el historial para que muestre slo comandos que contengan cierta cadena de texto. Por ejemplo, el comando history | grep whereis muestra slo comandos que contengan la cadena "whereis".$ history | grep whereis 153 whereis pvscan 161 whereis dmsetup 163 whereis gdmsetup 166 whereis gdmsetup 169 history | grep whereis

Puedes ver que aparece incluso el mismo comando que estamos ejecutando. (Mira Pipes y redirecciones de entrada-salida ms adelante en este captulo para ms informacin sobre como conectar diferentes comandos de esta manera.) El historial del intrprete de comandos BASH es muy poderoso, y este artculo slo muestra una pequea parte las miles de maneras en las que puedes ahorrarte escribir un comando ejecutado anteriormente. Para ver todos los detalles de el historial, usa el comando info bash, que muestra la ayuda en lnea actual.

Usando el completado de nombres de archivo y comandosDe BibliaubuntuSaltar a navegacin, bsqueda

Como has podido observar a lo largo del captulo, la lnea de comandos provee un poderoso y flexible mecanismo para ejecutar comandos, pero una de las metas de todos los desarrolladores de Unix y Linux es hacer que se tengan que teclear la menor cantidad de caracteres posible. Esto gener comandos extraos y enigmticos como ls o pwd, que posiblemente han ahorrado el desgaste de miles de teclados. Esta misma tendencia de "teclea lo menos posible" se extiende en la shell en varias maneras. Uno de los ms usados es el tabulador que nos ayuda a buscar y encontrar concordancias en comandos y nombres de archivos. Presionar el tabulador mientras tecleas el nombre de un comando puede hacer que la shell autoexpanda el nombre de ese comando de la nica forma que puede ser. Por ejemplo, como yo uso el editor de texto Emacs para cualquier actividad relacionada con archivos de texto, (mire Captulo 7: Trabajando con archivos de texto en Ubuntu para ms informacin) tecleo comandos como emacs "nombre_del_archivo.txt" cientos de veces al da. Y para ahorrar unos cuantos caracteres de escritura podra teclear "ema" en la lnea de comandos, y luego apretar el tabulador. Esto muestra el primer comando que coincide, que es emacs y luego puedo presionar el espacio y escribir nicamente el nombre del archivo que deseo editar. Pero espera, hay ms! El tabulador tambin nos permite encontrar los nombres de archivo. Por ejemplo, si se tratara de editar un archivo llamado "nombre_del_archivo", se podra teclear algunos de los primeros caracteres y presionar el tabulador para insertar (si existe y es nico) el nombre completo y nicamente tener que presionar Enter para editarlo. Este es uno de los usos ms comunes del tabulador, ya que como hemos visto en este captulo los comandos de Linux son cortos. Por otro lado, como algunos comandos son un poco extraos, si no recuerdas el deletreo exacto del comando que quieres ejecutar, puedes ayudarte usando el tabulador. Ejemplo:$ vi (y pulsas el TABulador dos veces, con una sola no aparece nada) vi viewres vimdiff vipw vidmode vigr vim.tiny visualinfo view vim vino-preferences visudo

El tabulador encuentra todos los comandos que puede. Si varios comandos concuerdan con lo que escribiste, el tabulador no tendr efecto, porque la shell no puede determinar el comando exacto que deseas utilizar. En estos casos, puedes presionar el tabulador dos veces seguidas para mostrar una lista completa de las coincidencias. Luego puedes escribir algunos caracteres adicionales que identifiquen uno solo de los comandos (o archivos).

Usando comodinesDe BibliaubuntuSaltar a navegacin, bsqueda Otro ejemplo de la idea de "teclea lo menos posible" es la capacidad de la shell de identificar grupos de archivos cuyos nombres cumplen ciertos parmetros. Los caracteres usados para estos parmetros son llamados comodines, porque pueden encajar con uno o ms grupos de caracteres. La shell soporta cuatro tipos de comodines:

?: Signo de pregunta. Representa un carcter individual. *: Representa una combinacin cualquiera de caracteres. {cadena1, cadena2}: (no son corchetes, son llaves) Representa una combinacin que encaje con cadena1 o cadena2. [caracter1, caracter2, ...]: (corchetes) Encuentra cualquier carcter o rango de caracteres incluido en la lista representada dentro de los corchetes.

Estos comodines pueden ser muy tiles cuando trabajamos con directorios que contienen varios archivos similares. Consideremos el siguiente directorio que tiene archivos de audio en diferentes formatos:$ ls d1t01.flac d2t02.flac d1t01.mp3 d2t02.mp3 d1t01.wav d2t02.wav d1t02.flac d2t03.flac d1t02.mp3 d2t03.mp3 d1t02.wav d2t03.wav d1t03.flac Horslips info.txt d1t03.mp3 playlist.m3u d1t03.wav d1t04.flac d1t04.mp3 d1t04.wav d1t05.flac d1t05.mp3 d1t05.wav d1t06.flac d1t06.mp3 d1t06.wav d1t07.flac d1t07.mp3 d1t07.wav d1t08.flac d1t08.mp3 d1t08.wav d1t09.flac d1t09.mp3 d1t09.wav d1t10.flac d1t10.mp3 d1t10.wav d1t11.flac d1t11.mp3 d1t11.wav d2t01.flac d2t01.mp3 d2t01.wav

Podrs darte cuenta de que los nombres de estos archivos siguen un formato que en este caso es disco cancin .formato. Para mostrar la primera cancin de cada disco, pero solo los archivos mp3, puedes hacer lo siguiente:$ ls d?t01.mp3 d1t01.mp3 d2t01.mp3

Aqu usamos el signo de pregunta para representar el numero de disco, que es un solo carcter. De igual manera para mostrar todos los archivos mp3 puedes utilizar el asterisco, como en el siguiente ejemplo:

$ ls *.mp3 d1t01.mp3 d1t09.mp3 d2t02.mp3 d1t02.mp3 d1t10.mp3 d2t03.mp3

d1t03.mp3 d1t11.mp3 d1t04.mp3 d2t01.mp3

d1t05.mp3 d1t06.mp3

d1t07.mp3 d1t08.mp3

Ahora supongamos que quieres mostrar solo los archivos que son wav o flac, podras hacerlo as:$ ls *.{flac,wav} d1t01.flac d1t03.wav d1t11.flac d2t02.wav d1t01.wav d1t04.flac d1t11.wav d2t03.flac d1t02.flac d1t04.wav d2t01.flac d2t03.wav d1t02.wav d1t05.flac d2t01.wav d1t03.flac d1t05.wav d2t02.flac d1t06.flac d1t06.wav d1t07.flac d1t07.wav d1t08.flac d1t08.wav d1t09.flac d1t09.wav d1t10.flac d1t10.wav

Finalmente, mostremos todas las canciones siete y ocho en formato mp3 que estan en el primer disco usando el siguiente comando:$ ls d1t0[78].mp3 d1t07.mp3 d1t08.mp3

Puedes combinar cualquiera de los comodines para identificar especficamente un grupo de archivos. Por ejemplo, el siguiente comando mostrar las canciones siete y ocho del primer disco que estn en flac y wav:$ ls d1t0[78].{flac,wav} d1t07.flac d1t07.wav d1t08.flac d1t08.wav

La shell bash provee un sistema muy poderoso de comodines. Los comodines como estos son muy tiles cuando queremos mover, copiar o borrar un grupo especifico de archivos.

CONSEJO

Si usas comodines en otros sistemas ten cuidado, los comodines de Linux no funcionan de la misma forma. Por ejemplo, en otros sistemas, puedes escribir algo como ren *.txt *.foo para renombrar archivos de tipo *.txt. Esto no funcionar en Linux por que los

comodines son revisados antes de que el comando se ejecute, y la parte *.foo del comando no encontrar nada, porque no hay archivos con esa extensin.

Pipes y redirecciones de entrada-salidaDe BibliaubuntuSaltar a navegacin, bsqueda

Como dijimos en el captulo 1, uno de los elementos ms bsicos de la filosofa de Unix y de Linux, es que las utilidades deben hacer una cosa, y las deben hacer bien. Esto evita mucha repeticin de cdigo si lo escribimos todo de forma que un comando procese la salida de cualquier otro. Por ejemplo, supongamos que quieres encontrar el nmero de archivos que hay en un directorio mostrando una lista de ellos y luego contando las lneas. Una manera fcil de hacer esto es escribir la salida con el comando ls hacia un archivo temporal y luego contarlos desde ah usando el comando wc -l (wc por "word count", "contar palabras"). Linux hace esto fcil, permitiendo la escritura de archivos usando la redireccin de salida, lo que esta representado en la consola por el signo "mayor que" (>). Como un ejemplo, para escribir la salida del comando ls a un archivo temporal /tmp/mi_directorio.txt podemos hacer lo siguiente:$ ls > /tmp/mi_directorio.txt

Y luego , como habamos dicho antes, usar wc -l:$ wc -l /tmp/mi_directorio.txt 8

Al parecer en el directorio actual hay ocho archivos. Pero, usar un archivo temporal requiere de un poco ms de escritura ya que adems hay que borrarlo. Afortunadamente, Linux nos trae otro smbolo especial para salvarnos, la barra vertical (|), que nos permite conectar la salida de un comando a la entrada de otro. Este smbolo es conocido como pipe (significa tubera o caera, en espaol), y lo puedes usar para evitar el uso de un archivo temporal:$ ls | wc -l 8

(Salida de ls entubada directamente hacia wc -l, que la toma como pseudofichero temporal de entrada) Si te encuentras ejecutando varios comandos, encontraras los conceptos de redireccin de salida y de pipes muy convenientes. La redireccin de salida es una buena forma de mantener una pista de los contenidos de archivos y directorios. Y mucho ms interesante, es el uso de esta para agregar informacin a un archivo.

En el ejemplo anterior, usando el smbolo "mayor que" creamos un archivo que no exista, pero si hubiera existido este hubiera sido sobrescrito. Posiblemente, tu preferiras agregar informacin en vez de sobrescribirla, lo que puedes hacer poniendo dos signos "mayor que" (>>) en vez de uno, como en el siguiente ejemplo:$ ls > /tmp/mi_directorio.txt $ ls >> /tmp/mi_directorio.txt $ wc -l /tmp/mi_directorio.txt 16

Como puedes ver, el archivo temporal ahora contiene dos veces el nmero de lineas inicial, como era de esperarse ya que escribimos dos veces el directorio. La shell bash tambin soporta redireccin de entrada, que nos permite leer informacin de un archivo y usarla como la entrada de otro comando. Para completar la informacin sobre redireccin de entrada, mira la ayuda en lnea sobre la shell bash. Te dars cuenta de que usas mucha ms redireccin de salida y tuberas que redirecciones de entrada, pero uno nunca sabe qu se encontrar...

Presentando el control de tareasDe BibliaubuntuSaltar a navegacin, bsqueda A lo largo de este captulo siempre ejecutabas comandos en la consola, y luego esperabas a que terminaran. Eso est bien para comandos con tiempos cortos de ejecucin, pero que pasa si necesitas ejecutar un comando durante mucho tiempo? La shell bash provee una solucin muy buena para estas situaciones, permitindote iniciar comandos y dejarlos funcionando en segundo plano. Al hacer esto, el comando se ejecutar aunque ste no est visible en la consola. Supongamos que quieres usar emacs para editar el archivo mi_archivo.txt, pero tambin quieres usar la terminal de GNOME mientras emacs esta funcionando en su propia ventana. Para iniciar un comando en segundo plano, solo tienes que poner un & al final como en el ejemplo:$ emacs mi_archivo.txt & [1] 7539

Iniciar un comando en segundo plano es tambin conocido como iniciar el control de tareas, y hace que la consola muestre dos pequeas informaciones:

El nmero de trabajo (entre corchetes) El ID (identificador) del proceso que iniciamos

El nmero de trabajo es muy til ya que es posible ejecutar varios comandos en segundo plano al mismo tiempo y este nmero nos da una nica forma de identificar un comando especfico. A diferencia de la ID del proceso (que es la misma para todo tu sistema

Ubuntu, sea quien sea el usuario que la inici), el nmero de trabajo identifica el comando nicamente dentro del control de tareas y en el contexto del shell actual. Pero para qu quieres identificar estos procesos? Pues, primordialmente, para cuando quieras terminarlos o despertarlos si algo va mal. Por ejemplo, supn que accidentalmente inicias un comando en segundo plano, pero este necesita de algn dato de entrada (porque est preguntndote algo que necesita una respuesta tuya de s o no). Para traer un comando de vuelta al shell actual, solo tienes que referirte a l usando el porcentaje (%) y el nmero de trabajo, como en el ejemplo:$ %1

Esto har que el comando emacs "vuelva" de modo que a partir de ahora cualquier cosa que escribas la recibir emacs. Supongamos, tambin, que perdiste de vista en tu pantalla la ventana de emacs y simplemente quieres terminar el proceso. Puedes hacerlo usando el comando kill (matar), y especficando el nmero de proceso como en el ejemplo:$ kill %1

(matar proceso %1) Al saber adems del nmero de trabajo, la ID del proceso, tambin puedes terminar el proceso desde otra shell como en el siguiente ejemplo:$ kill 7539

Disponer de la capacidad de ejecutar comandos de largo tiempo de ejecucin es hoy en da muy importante, porque en los entornos grficos multiventanas actuales normalmente quieres tener la capacidad de continuar usando tu consola actual mientras se ejecuta el otro proceso a su propio arbitrio. Como siempre, el control de tareas es mucho ms flexible y poderoso que la breve presentacin descrita aqu. Para completar la informacin, usa el comando info para ver la ayuda en lnea de la shell bash.

Explorando el archivo de configuracin de BASHDe BibliaubuntuSaltar a navegacin, bsqueda Cuando inicias el intrprete bash en tu Ubuntu, una de las primeras acciones que hace es leer varios ficheros de texto de tu sistema buscando informaciones sobre su configuracin. Esos ficheros de configuracin son, en el mismo orden en que los lee:

/etc/profile (slo para los shell de ingreso) /etc/bash.bashrc (para todos los shells bash) ~/.bash_profile (slo para los shell de ingreso) ~/.bashrc (para todos los shells bash)

NOTA

El smbolo ~ (virgulilla) es una abreviatura del shell bash para indicar el directorio personal del usuario. ~/.bashrc se refiere al fichero .bashrc ubicado en mi directorio personal. ~malgia/.bashrc o ~filiprino/.bashrc son referencias al directorio personal de los usuarios malgia o filiprino, respectivamente. Entre esos ficheros de inicializacin del shell, los dos primeros se leen e incorporan cuando cualquier usuario ingresa en el sistema (/etc/profile) o inicia un shell bash (/etc/bash.bashrc). Los otros dos son ficheros de configuracin individuales guardados en cada uno de los directorios personales de cada usuario. De la misma manera que los ficheros de configuracin de sistema, el fichero ~/.bash_profile lo lee el shell durante el ingreso, mientras que el ~/bashrc lo lee cualquier otro shell que el usuario quiera crear despus, tal como el xterm o el terminal de GNOME. De estos dos, el ms importante es el .bashrc por dos razones:

En Ubuntu, el fichero ~/.bash_profile se lee incluso en el contexto de un shell de ingreso. Inicial un shell bash es una operacin mucho ms frecuente que la de ingresar. Un usuario suele ingresar slo una vez, mientras que iniciar un xterm o terminal de GNOME puede hacerlo muchsimas veces.

El fichero .bashrc permite a cada usuario personalizar varios aspectos de su shell bash, tales como dnde buscar los comandos, el formato utilizado para mostrar su prompt, el nmero de comandos que retiene en su historial, y muchas ms cosas. Tambin te permite crear tus propios comandos abreviados personalizados si te ves obligado a teclear cierto comando demasiadas veces para tu gusto o bien cierto comando con demasiadas opciones muy tediosas de repetir. Las lneas que empiecen con (#) en cualquier fichero de configuracin de bash (o programa de shell, si se da el caso) se interpretarn como comentarios y no se ejecutarn. CONSEJO

Todos los shells de Linux pueden interpretar un lenguaje de comandos, estructuras de bucles, y admitir expresiones condicionales que hacen fcil escribir muy diversos guiones de acciones para el intrprete (shell scripts). Explicar los misterios de la programacin del shell queda fuera de esta introduccin a Ubuntu Linux, pero puedes

encontrar libros y pginas web excelentes sobre el tema. Dos buenos sitios web donde informarse son el Linux Shell Scripting Tutorial (en ingls) y la Iniciacin de Novato a Novato del Proyecto LuCAS. Tambin en su versin en ingls sita en The Linux Documentation Project Cuando se crea una cuenta de usuario en un sistema Ubuntu, se crean con ella los ficheros .bashrc y .bash_profile. Esos dos ficheros se crean mediante la copia desde unos ficheros plantilla con los mismos nombres, y que estn ubicados en el directorio /etc/skel. Lo que sigue es el principio del fichero .bashrc que utilizan todas las cuentas de usuario en Ubuntu:# ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bashdoc) # for examples # If not running interactively, don't do anything [ -z "$PS1" ] && return [nos ahorraremos el resto del fichero...]

La ltima lnea de este ejemplo hace que se detenga la ejecucin del propio fichero .bashrc si ste no se est ejecutando en modo interactivo. Esto se hace utilizando el comando [ (un corchete) para comprobar el valor de la variable de entorno PS1 (sabemos que es una variable de entorno porque tiene un smbolo dlar $ delante, el $ no forma parte del nombre de la variable). En la variable PS1 est definido el prompt del usuario, y sirve para retornar al shell padre si dicha variable est sin definir (si no est definida es que se est ejecutando un programa shell, porque en modo interactivo s est definida). Que qu es una variable de entorno? Est bien que lo preguntes.

Usando variables de entornoDe BibliaubuntuSaltar a navegacin, bsqueda Las variables de entorno son unas variables que se definen dentro del contexto del intrprete de comandos o shell, y las leen y usan las aplicaciones de tu sistema (incluyendo entre esas aplicaciones al shell mismo). Una de las ms utilizadas es la variable de entorno PATH, que contiene una lista de directorios, separados por el smbolo dos puntos ":". Esa lista de directorios es la que el shell utiliza para buscar (en ese mismo orden) los comandos que debe ejecutar. Puedes examinar los valores de las variables de entorno definidas en un shell mediante tres mtodos diferentes:

Utilizando el comando set que viene integrado en todos los shells, y que muestra todas las variables de shell que tienen algn valor definido. Utilizando el comando printenv ("mostrar entorno", tambin integrado en el shell) para obtener en pantalla una lista de las variables de entorno seleccionadas (o todas, si no especificas alguna) que tienen algn valor definido.

Utilizando el comando integrado echo (eco en pantalla) para mostrar el valor de una variable de entorno que especifiques.

Los comandos set y printenv muestran una gran cantidad de texto con la informacin, as que se suele utilizar ms el comando echo cuando se desea consultar el valor de una nica variable de entorno, como en el siguiente ejemplo:$ echo $PATH / usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

NOTA

El valor de la variable de entorno PATH (ruta) es una sola cadena conteniendo directorios separados por los dos puntos. La cadena podr ser muy larga y la podras ver mostrada en varias lneas sobre tu terminal, pero se trata de una cadena nica y lineal. Cuando se utiliza el comando echo se debe teclear el signo del dlar ($) delante del nombre de la variable. As, se le dice al shell que muestre el valor de la variable en vez de simplemente mostrar su nombre, que es lo que ocurrira si escribes:$ echo PATH $ echo PEPE $ echo perico PATH PEPE perico de los palotes de los palotes

En el primer ejemplo mostramos el valor predeterminado de $PATH en Ubuntu Linux. Para aadir un directorio a la lista de directorios donde el shell buscar los comandos, puedes ejecutar algo como:$ export PATH=/usr/bibliaubuntu/bin:$PATH

Este comando asigna el valor de la variable (sin poner el "$" delante) y lo exporta al entorno general del shell. Este ejemplo aade un directorio bin personal como el primer elemento de mi PATH (mi ruta de bsqueda), as que el shell siempre empezar a buscar comandos primeramente en esa ruta. Para hacer que este cambio sea permanente, aadira la lnea export PATH=... al final de mi fichero ~/.bashrc. El comando echo es til con una sola variable de entorno. Tambin puedes usar printenv para hacer lo mismo, como en el siguiente ejemplo:$ printenv PATH / usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Dado que el comando printenv est pensado para mostrar variables de entorno, no debe anteponerse el signo dlar ($) al nombre de la variable. Se da por supuesto que el argumento siempre ser una variable de entorno.

Los comandos printenv y set se suelen utilizar para mostrar los valores de las variables de entorno que estn realmente definidas. As, puedes buscar en ellas una cierta subcadena de texto al entubar su salida hacia el comando grep, como aqu se ve:$ printenv | grep HIST HISTCONTROL=ignoreboth $ printenv | grep LESS LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s

Vemos que podemos buscar una cadena y encontrar las variables cuyos nombres concuerden, y con sus respectivos valores.

Definiendo y usando aliasDe BibliaubuntuSaltar a navegacin, bsqueda

Otra caracterstica muy interesante de la shell bash es la posibilidad de definir alias en algunos comandos. Un alias es una cadena que la shell reconoce y que nos facilita el uso de ciertos comandos. Algunos de los alias ms comunes usados en Linux son para los comandos cp y rm, forzando a que se ejecuten automticamente en su modo interactivo, lo que nos muestra una confirmacin antes de borrar o copiar un archivo. Los alias se pueden definir desde la consola como se muestra a continuacin (si quieres que sea permanente debes modificar el archivo ~/.bashrc):$ alias cp=cp -i $ alias rm=rm -i

Una vez asignados los alias la consola los reemplaza automticamente cuando los usas, como si los tecleases enteros (escribes "cp" y la consola hace como si hubieras escrito "cp -i"). Para simplificar el uso de los alias (y minimizar el nmero de cambios de ~/.bashrc), el archivo ~/.bashrc tiene por defecto las siguientes entradas comentadas:#if [ -f ~/.bash_aliases ]; then # . ~/.bash_aliases #fi

Si les quitas el smbolo numeral (o almohadilla), las entradas dejarn de estar comentadas, y el archivo har que todos los alias se guarden en ~/.bash_aliases, que se crear en el directorio /home.

Resumen cap 6De Bibliaubuntu

Saltar a navegacin, bsqueda

Este captulo te introdujo en el uso de la lnea de comandos, la terminologa usada por los interpretes, y las capacidades ms bsicas de la shell bash (el intrprete usado por defecto en Ubuntu). Tambin se discuti sobre el acceso a la consola y sobre el uso de los comandos ms comunes. Y finalmente concluy con una explicacin sobre los archivos de configuracin usados por la shell bash, y algunos de los elementos ms comunes que utiliza. Con la idea de que trabajar desde la lnea de comandos implica el uso de archivos de texto, lo que se discute en el Captulo 7: Trabajando con archivos de texto en Ubuntu. Aunque muchos procesadores de texto usan un formato binario especial, los archivos de texto todava estn vivos en el Internet y en los sistemas Linux. Los documentos que usan lenguajes de marcadocomo HTML, SGML y XML pueden ser todos creados o editados desde un editor de texto. Y la mayora de servidores que usan Linux, incluyendo los que se discuten al final de este libro, son configurados cambiando los parmetros que estn guardados en archivos de texto. Por estas razones, y por algunas ms, aprender a usar un editor de texto es fundamental.

Captulo 7: Trabajando con archivos de texto en UbuntuDe BibliaubuntuSaltar a navegacin, bsqueda

Muchos de nosotros estamos acostumbrados a trabajar con archivos en diferentes formatos, a menudo identificados por su extensin y su icono. Por ejemplo todos estamos familiarizados con los archivos doc producidos por el Microsoft Word, los pdf usados por Adobe Acrobat, los xls de Excel, los fm generados por el FrameMaker, los ppt con los que trabaja PowerPoint, etc. Todos estos archivos contienen cierta informacin, casi siempre en binario, lo que permite el mejor uso posible de estos por el programa que los genera. Sin embargo esto nos complica el tratar de abrirlos con cualquier otra aplicacin diferente a la que los cre. Adems de archivos con extensiones fuertemente asociadas a ciertas aplicaciones existen otros mucho ms genricos, y que se conocen como archivos de texto ASCII. Su contenido consiste slo en las letras, nmeros y smbolos que encuentras fcilmente en un teclado. Lo bueno de estos ficheros es que son muy fciles de leer, fciles de procesar, y en general trabajar con ellos tambin carece de complicaciones. Sin importar para qu vayas a utilizar tu Ubuntu Linux, de una o otra forma vas a terminar creando un archivo de texto. Por ejemplo, si escribes el cdigo fuente de tu programa, hacindolo como texto ASCII plano y estndar cualquier compilador podr procesarlo. Si eres un escritor, necesitaras usar archivos de texto si quieres poder editarlos en cualquier sistema, cualquier editor y cualquier procesador de textos. As

puedes trabajar con ellos tan fcilmente en tu Ubuntu como puedes hacer con tu Mac OS X. Un tema ms importante an: en Linux muchas utilidades del sistema operativo usan uno o ms archivos para guardar informaciones de configuracin e inicializacin, y aunque muchas de estas se pueden configurar grficamente, casi siempre es ms rpido y sencillo editar directamente estos archivos, ya que no tienes que ejecutar la herramienta correcta, ni buscar la pestaa en donde est lo que buscas. Este captulo empieza describiendo una breve historia de los archivos de texto en Unix y las "guerras de religin" sobre la manera "correcta" de editarlos, una polmica que todava existe en el entorno de usuarios Unix/Linux. Luego se provee algo de informacin sobre dos de los ms importantes editores de texto: vi y emacs, y se habla tambin acerca de ed, un rpido, simple y pequeo editor, perfecto para cambiar cosas rpidamente. El captulo termina discutiendo gedit, un editor de texto grfico que viene con GNOME.

Introduccin a los editores de texto de LinuxDe BibliaubuntuSaltar a navegacin, bsqueda

Las primeras versiones del Unix para PDP-11 que distribuyeron los Laboratorios Telefnicos Bell incluan un editor de texto pequeo y orientado a la edicin de lneas llamado ed, escrito por Ken Thompson. Otras personas siguieron mejorando ed, entre ellas la ms notable fue George Coulouris del britnico Queen Mary College (QMC) que aadi interactividad a la edicin de lneas simples como parte de su editor em (editor para seres mortales), y que se trajo consigo a la Universidad de California en Berkeley (UCB) en 1976. Al mismo tiempo, Ken Thompson se haba ido a la UCB para dar clases durante un ao o as, y durante ese tiempo haba empezado a trabajar con Bill Joy y Chuck Haley en unas mejoras para Unix que finalmente llevaran a la primera versin de BSD. Haley y Joy estuvieron trasteando con em una temporada, reversionndolo como en y un montn de otros nombres, navegando por todo el alfabeto hasta que llegaron a ex, que segua siendo un editor de texto orientado a la edicin lnea a lnea (muy incmodo an). Sin embargo, en 1976, Joy cre el editor vi, un editor orientado a la edicin en toda la pantalla y que usaba el mismo juego de comandos que ex. Todo gracias al estmulo producido por un cierto nmero de terminales ADM-3A donados a la UCB. La flexibilidad que ofreca vi al utilizar toda la pantalla mediante el uso del fichero /etc/termcap fue un enorme paso adelante en separar el conocimiento detallado del hardware y el uso de un editor, y la edicin de textos en Unix nunca volvi a ser la misma desde aquel momento. Sobre la misma poca, en la parte oriental de Estados Unidos, un puado de destripacomputadoras expertos en lenguaje Lisp y sistemas

ITS/TOPS-20/TWENEX ubicados en el laboratorio de inteligencia artificial del Instituto Tecnolgico de Massachusetts (conocido como MIT) se dedicaban a mejorar un vetusto editor de lneas para PDP-10 llamado TECO. En el laboratorio de inteligencia artificial de Stanford haban visto algo del trabajo de edicin grfico que all se desarrollaba. Inspirado por ello, Richard Stallman (famoso actualmente por la GNU y la FSF) y Guy Steele recopilaron y desarrollaron una versin de TECO a la que los usuarios podran aadir sus propios comandos, y crearon y aadieron una serie de comandos TECO en un nico paquete que ofreca edicin en pantalla usando TECO. Los comandos de TECO consistan en un conjunto de macros (secuencias de rdenes que se ejecutan juntas), y de este modo el conjunto de macros se lleg a conocer como "Edicin de MACroS", o simplemente, EMACS. Toda esta historia es perfecta si casualmente utilizas un PDP-10 de DEC, y emacs sera una interesante nota a pie de pgina de la Historia si no hubiera sido por los esfuerzos de Dave Conroy, quien escribi una versin de emacs llamada MicroEmacs que poda funcionar sobre prcticamente cualquier cosa, y James Gosling (famoso posteriormente gracias a Java), quien escribi una versin de emacs para Unix en 1981. A diferencia de las macros EMACS que fueron la inspiracin original, estas eran autnticos programas que se ejecutaban directamente sobre sistemas concretos en forma de binarios compilados. Las versiones de Gosling para emacs, llamadas sin demasiada inventiva "Gosling para emacs" o simplemente "gosmacs", sirvieron como la base original de una versin de cdigo abierto de emacs para Unix escrita por (no poda ser otro) Richard Stallman, quien empez a escribir GNU emacs en 1984. Por razones legales, Stallman termin sustituyendo todo el cdigo original de Gosling para emacs que incluy en GNU emacs, y tambin sustituy el lenguaje de configuracin Mocklisp emacs por un completsimo intrprete de Lisp interno que permita interpretar ficheros de configuracin y otros datos de inicializacin.

NOTA

Conforme transcurran los aos, se han pensado alternativas diferentes a "Edicin de MACroS" para darle otro sentido al acrnimo EMACS. Algunas de las que me parecen mejores son "Escape Meta Alt Control Shift" (debido al gran uso que hace emacs de las teclas Control y Escape para sus comandos), y "Eight Megabytes And Constantly Swapping" "Ocho megabytes intercambindose constantemente", dado el relativamente alto consumo de memoria de emacs y que tena su gracia cuando 8 MB de RAM era mucha memoria para un ordenador pero con los ordenadores actuales tiene poco sentido. Incluso los telfonos mviles actuales tienen ms RAM. [editar]

Editores modales y no modalesComo dijimos antes, entre los usuarios de Unix y de Linux, no hay mejor discusin interminable que la de cul editor es mejor: si vi o emacs. Si todos los caracteres empleados para este tema los hubieran tecleado al azar unos chimpancs, hubieran podido escribir toda la obra de Cervantes, Borges, Larra y Jardiel Poncela. Como nuevo usuario de Ubuntu, terminars viendo algo de ello, as que te proporcionar algo de culturilla sobre el tema. La diferencia bsica sobre cmo se usan vi o emacs residen en lo siguiente: emacs es lo que se conoce como un editor no modal, significa que cualquier carcter que teclees quedar insertado en donde sea que ests editando (lo que se conoce como modo de insercin), mientras que vi se dice que es un editor modal porque el modo de insercin es simplemente uno de los modos disponibles. Vi y emacs son enormemente configurables, aunque vi no dispone del intrprete de Lisp integrado para "simplificar" la creacin de funciones propias. Por otro lado, ya que vi no tiene un lenguaje Lisp integrado, es mucho ms pequeo y rpido en ejecucin que emacs. Emacs es ms potente porque incluye un cliente de correo, lector de noticias, incluso unos pocos videojuegos. Por otro lado, podra ser que necesitases simplemente un editor de textos y no un entorno completo de computacin. La gente se suele quejar de que vi y emacs son muy difciles de aprender para los novatos. En mi experiencia, slo depende de dnde quieres que se confundan los usuarios. En emacs, las posibilidades de que alguien pueda deducir que si pulsas la tecla Control, y luego una pareja de teclas concreta har que guardes el fichero y salgas del programa, son ridculamente bajas. Sin embargo, vi no har nada realmente til hasta que entres en el modo de insercin. Y despus de eso, salir del modo de insercin y descubrir cmo se guarda el fichero ha hecho soltar alguna que otra lgrima de desesperacin a ms de un usuario novato de Linux/Unix. Esto es lo que he decidido finalmente: he usado versiones de emacs desde la gosmacs, y todo este wiki se puede escribir en emacs. Mis dedos ya trabajan espontneamente con emacs. Sin embargo, tambin utilizo vi para desarrollar la mayor parte de las tareas del sistema, especialmente cuando me siento por primera vez ante el ordenador de otra persona. Por qu?: porque vi se inicia ms rpidamente que emacs, pero tambin y principalmente, porque con una gran frecuencia, el emacs de otra persona tiene muy personalizadas sus combinaciones de teclas. La combinacin de teclas que en mi ordenador produce la alineacin con justificacin de un prrafo podra en tu ordenador enviar a tu novia un mensaje electrnico con cualquier texto al azar. Si te interesa saber ms sobre la historia de la edicin de textos en Unix (y por lo tanto, en Linux), consulta los siguientes enlaces:

Historia de ed (y ms): www.english.uga.edu/hc/unixhistory.html George Colouris y em: www.dcs.qmul.ac.uk/~george/history/. Entrevista a Billy Joy: www.cs.pdx.edu/~kirkenda/joy84.html (publicada originalmente en el nmero de Agosto de 1984 de la revista Unix review) El Cisma entre Lemacs y FSFmacs: www.jwz.org/doc/lemacs.html.

Usando ViDe BibliaubuntuSaltar a navegacin, bsqueda Debido a que el actual cdigo de vi pertenece a AT&T, los fans de vi lo han reescrito. Es por eso que actualmente existen dos clones de vi: nvi y vim. La usada por Linux es vim (vi mejorado), pero nvi (nuevo vi) es ms popular y es la que se usa en algunos sistemas como OpenBSD, FreeBSD, y algunos ms. A lo largo de esta seccin me referir a vim como vi ya que son compatibles, y el sistema tambin instala un alias para vim llamado vi. Cuando tratemos de algn detalle concreto de vim que no encontremos en vi, se especificar explcitamente.

CONSEJO

Aunque este texto es una buena fuente de informacin para el uso de vim, la instalacin habitual de vim incluye una gua llamada vimtutor, que inicia vim con una gua sobre el uso del mismo. Si quieres ver algunos ejemplos sobre el uso de vi y revisar sus comandos, el vimtutor es un buen punto de arranque. Como se discuti en la seccin anterior, vi es un editor con varios estados (lo que quiere decir que las mismas teclas pueden realizar diferentes cosas de acuerdo al modo en el que estas). Los estados ms importantes son los siguientes:

Normal: vi siempre arranca en modo normal. En este modo puedes utilizar todos los movimientos de cursor y los comandos para borrar texto, pero no puedes agregar texto al archivo que estas editando. Es una de las caractersticas que ms confunden a los que se inician en vi, ya que cualquier persona al empezar a utilizar un editor de texto lo que espera es poder teclear textos inmediatamente. Insertar: En este modo, teclear cualquier tecla alfanumrica o smbolo agrega los correspondientes caracteres al texto que estas editando. Este es el modo en el que mucha gente piensa que debera abrirse siempre un editor de texto. Cuando estas en este modo tienes que presionar la tecla Escape para volver al modo "Lnea de comando". Lnea de Comando: En este modo, el cursor est en la parte baja de la ventana de vi, y puedes ingresar una sola lnea que ser interpretada por vi como un

comando, una bsqueda o una peticin para la ejecucin de un comando externo sobre una parte del archivo que estas editando (un comando de filtro). El concepto de editor modal puede parecer confuso al principio, pero hace de vi un editor de texto rpido y potente. Una vez que aprendes como cambiar de modos, te dars cuenta de que este es un excelente editor. Y el hecho de que todo sistema Unix tenga instalada alguna de las versiones de vi hace que valga la pena aprender a usarlo. Una de las mejores caractersticas de vi es la capacidad de poder anteponer a la mayora de sus comandos un argumento numrico (ejecuta el comando un nmero de veces indicado por el argumento), un movimiento (que puede ir precedido por un argumento numrico para repetirlo n veces) o un comando de mbito (aplica el comando a cierta parte del archivo). A lo largo de la seccin podrs encontrar diferentes ejemplos, as como algunos consejos y trucos de vi que he aprendido a lo largo de los aos.

NOTA

Todos los ejemplos de este captulo muestran vi en una ventana externa para recalcar que vi no es una aplicacin grfica con mens, como los que pueda tener GNOME. Si quieres informacin sobre versiones grficas de vi, mira Versiones grficas de Vi ms adelante en este captulo.

Entrando y saliendo de ViDe BibliaubuntuSaltar a navegacin, bsqueda Uno de los conocimientos imprescindibles sobre cualquier aplicacin es saber cmo iniciarla y cmo salir de ella. Antes dijimos que la primera vez que se pretende salir de vi puedes quedar confuso debido a su naturaleza modal, pero una vez asimilado este hecho, llega a ser como tu segunda naturaleza. [editar]

ENTRANDO:para iniciar vi, ingresamos el comando vi seguido del archivo.bibliaubuntu@ubuntu:~$ vi nombre_archivo

Vi es un editor de texto que se maneja desde consola, as que puedes iniciarlo desde el terminal de GNOME o desde una ventana de xterm. Opcionalmente, puedes teclear un nombre de archivo como argumento y vi se ejecutar y abrir inmediatamente dicho

archivo de texto. La figura 7.1 muestra a vi editando un fichero de texto (hemos tecleado vi /etc/modules para conseguirlo):

Figura 7.1: Una ventana de Xterm mostrando a vi mientras editamos con l al fichero /etc/modules Ntese que el nombre_archivo no necesita extensin .txt. Es muy til para editar archivos de texto (entiendase tambien los .conf,.txt, los ficheros de /etc,... modificables) desde el modo seguro (failsafe en ingls) de linux o desde el modo consola.

[editar]

SALIENDO:Puedes salir de vi de varias formas, pero antes debes poner a vi en modo normal. Para volver al modo normal mientras ests editando un fichero, simplemente pulsa la tecla "Escape". Si ves aparecer los smbolos ^[ pulsa Escape otra vez. Ahora ests en modo normal. Puedes salir de vi de tres formas diferentes:

Para salir inmediatamente sin guardar cambios, teclea los comandos :q! (smbolo de dos puntos, una letra q, y el smbolo de admiracin !). El comando :q es la orden general para salir, y si la tecleas y has hecho cambios en el archivo preguntar si deseas guardar antes los cambios. Al teclear :q! sales de vi

indicndole que no deseas guardar los cambios. Otra forma es pulsar la tecla Maysculas, dejarla pulsada, y pulsar ZQ y soltar Maysculas. De esta forma no se ve cambio alguno en la pantalla, slo se ve que sales de vi sin dilacin. Para guardar los cambios y salir inmediatamente, teclea :x o :wq. La orden :x slo existe en vim y hace lo mismo que la orden tradicional :wq (escribir y salir, write and quit). La forma "silenciosa" es: pulsar Maysculas y dejarla pulsada, pulsar ZZ y soltar Maysculas. Para especificar el nombre del archivo donde quieres guardar los cambios, teclea el comando :w nombre_archivo. Si el archivo nombre_archivo ya existe, tendrs que utilizar la variante :w! nombre_archivo que significa "s, quiero sobreescribir ese archivo! s lo que hago!".

Resumen rpido de rdenes::q! salir sin guardar. :w nombre_archivo guardar con el nombre indicado :w! nombre_archivo guardar con el nombre indicado, sobreescribiendo el fichero existente con ese mismo nombre :wq salir y guardar cambios (modo seguro, pregunta antes de sobreescribir). :wq! salir y guardar cambios.

Insertando texto en ViDe BibliaubuntuSaltar a navegacin, bsqueda

Una vez que tienes vi funcionando, estars deseando empezar a teclear tu programa, carta, manifiesto o panfleto. Hemos visto que vi se inicia en el modo normal, un modo en el que puedes mover el cursor e introducir rdenes, pero no teclear textos. Para insertar texto en vi, te colocas en la posicion que deseas editar o agregar y simplemente presionas la tecla "i" (orden de "i"nsertar texto). Cualesquiera caracteres tecleados a partir de ahora se insertarn en el archivo que ests editando hasta que salgas del modo de insercin. Para salir del modo de insercin, pulsa la tecla Escape. La orden "i" para empezar la insercin hace que se inserte texto en la posicin inmediatamente posterior a la posicin actual del cursor, lo que puede ser incmodo. Si quieres aadir texto justo despus de la posicin actual del cursor, usa la orden "a". Para aadir texto al final de la lnea donde ests situado, usa la orden "A" (en maysculas). Las rdenes a y A son rdenes especiales para insertar texto en lugares determinados. Como siempre, para salir del modo de insercin despus de stas rdenes, pulsa la tecla Escape.

Movindonos por ViDe BibliaubuntuSaltar a navegacin, bsqueda El editor vi se apoya fuertemente en rdenes de movimiento del cursor. Ls ms comunes son:

h o Flecha Izquierda: mueve el cursor un carcter hacia la izquierda. l o Flecha Derecha: mueve el cursor un carcter hacia la derecha. j o Flecha Abajo: mueve el cursor hacia la lnea de abajo, manteniendo la posicin dentro de la lnea si ello es posible. k o Flecha Arriba: mueve el cursor hacia la lnea de arriba, manteniendo la posicin dentro de la lnea si ello es posible.

Asignar teclas como h, j, k l para el movimiento del cursor puede parecer extrao al principio, pero recuerda que vi se dise originalmente para su uso en terminales y que stos no tenan teclas de flechas. Son restos de los tiempos de los "dinosaurios" informticos.

CONSEJO

En el modo de insercin, los antiguos comandos de movimiento de cursor (h, j, k y l) no hacen nada, insertan la letra correspondiente en el texto. Recuerdas que vi es un editor modal? En el modo de insercin, inserta. Sin embargo, las teclas de flechas mueven el cursor incluso en el modo de insercin. Antes mencionamos que se puede hacer repetir stas rdenes de movimiento un nmero concreto de veces, anteponindoles un argumento numrico. Por ejemplo, puedes mover el cursor cinco caracteres hacia la derecha tecleando 5l, seis lneas hacia arriba tecleando 6k, 400 lneas hacia abajo tecleando 400j, y todo as. Es prctico, sin embargo antes necesitas contar cunto debe moverse el cursor, y resultara tedioso a la larga si lo que quieres hacer es moverte a la siguiente palabra, a la anterior, o (lo ms comn) moverte a algn lugar lgico del texto. Para permitir todo eso, vi entiende la siguiente serie de comandos de movimiento:

b: moverse una palabra hacia atrs. w: moverse una palabra hacia adelante. ^: moverse al principio de la lnea actual.

$: moverse al final de la lnea actual (: moverse al principio de la frase actual. ): moverse al final de la frase actual. {: moverse al principio del prrafo actual. }: moverse al final del prrafo actual. 1G: salto directo a la primera lnea del archivo que ests editando. 0G: salto directo a la ltima lnea del archivo. Si usas vim, puedes simplemente pulsar G para hacer lo mismo, pero es posible que no funcione en todas las versiones de vi.

Realmente, las dos ltimas rdenes de movimiento son ejemplos de la orden que sirve para desplazarse a una lnea determinada, y nos sirven para ilustrar lo bien que trabajan las rdenes de vi con argumentos numricos. Por ejemplo, podras desplazarte a la decimocuarta lnea del fichero tecleando 14G. De forma muy parecida, podras desplazarte al final del tercer prrafo contando desde tu posicin actual tecleando 3}. NOTA

Si usas teclado en Espaol, para conseguir, por ejemplo,el carcter { debers teclear de la misma forma que si usases el modo de insercin: AltGr + { , y funcionar. Igualmente, para ir al final con el comando 0G debers teclear: 0 + Maysculas y dejarla pulsada + G + soltar Maysculas ,ya que la G est en maysculas y pulsar 0g no funcionar. Si tienes BloqMays activado te bastar con teclear el "0" y la "G" Vi tambin te permite desplazar toda la pantalla sin mover el cursor de sitio (a menos que sea necesario, por supuesto):

Control + d: (pulsa y deja pulsada la tecla Control y pulsa la tecla d). Desplazar la parte visualizable del fichero una pantalla entera hacia abajo. Control + e: (pulsa y deja pulsada la tecla Control y pulsa la tecla e). Desplazar la parte visualizable del fichero una lnea hacia abajo. Control + u: (pulsa y deja pulsada la tecla Control y pulsa la tecla u). Desplazar la parte visualizable del fichero una pantalla entera hacia arriba. Control + y: (pulsa y deja pulsada la tecla Control y pulsa la tecla y). Desplazar la parte visualizable del fichero una lnea hacia arriba.

Las rdenes Control+d y Control+u desplazan toda la pantalla pero mantienen el cursor en la misma posicin de la pantalla (a pesar de que el texto que tuviesen debajo haya cambiado). Las rdenes Control+e y Control+y mantienen el cursor sobre el mismo texto en que estuvieran situadas, y hasta que esa lnea se salga de la pantalla. En ese momento el cursor se queda en la misma posicin pero el texto sobre el que est situado ser diferente.

Movindonos por ViDe Bibliaubuntu

Saltar a navegacin, bsqueda El editor vi se apoya fuertemente en rdenes de movimiento del cursor. Ls ms comunes son:

h o Flecha Izquierda: mueve el cursor un carcter hacia la izquierda. l o Flecha Derecha: mueve el cursor un carcter hacia la derecha. j o Flecha Abajo: mueve el cursor hacia la lnea de abajo, manteniendo la posicin dentro de la lnea si ello es posible. k o Flecha Arriba: mueve el cursor hacia la lnea de arriba, manteniendo la posicin dentro de la lnea si ello es posible.

Asignar teclas como h, j, k l para el movimiento del cursor puede parecer extrao al principio, pero recuerda que vi se dise originalmente para su uso en terminales y que stos no tenan teclas de flechas. Son restos de los tiempos de los "dinosaurios" informticos.

CONSEJO

En el modo de insercin, los antiguos comandos de movimiento de cursor (h, j, k y l) no hacen nada, insertan la letra correspondiente en el texto. Recuerdas que vi es un editor modal? En el modo de insercin, inserta. Sin embargo, las teclas de flechas mueven el cursor incluso en el modo de insercin. Antes mencionamos que se puede hacer repetir stas rdenes de movimiento un nmero concreto de veces, anteponindoles un argumento numrico. Por ejemplo, puedes mover el cursor cinco caracteres hacia la derecha tecleando 5l, seis lneas hacia arriba tecleando 6k, 400 lneas hacia abajo tecleando 400j, y todo as. Es prctico, sin embargo antes necesitas contar cunto debe moverse el cursor, y resultara tedioso a la larga si lo que quieres hacer es moverte a la siguiente palabra, a la anterior, o (lo ms comn) moverte a algn lugar lgico del texto. Para permitir todo eso, vi entiende la siguiente serie de comandos de movimiento:

b: moverse una palabra hacia atrs. w: moverse una palabra hacia adelante. ^: moverse al principio de la lnea actual. $: moverse al final de la lnea actual (: moverse al principio de la frase actual. ): moverse al final de la frase actual. {: moverse al principio del prrafo actual. }: moverse al final del prrafo actual. 1G: salto directo a la primera lnea del archivo que ests editando.

0G: salto directo a la ltima lnea del archivo. Si usas vim, puedes simplemente pulsar G para hacer lo mismo, pero es posible que no funcione en todas las versiones de vi.

Realmente, las dos ltimas rdenes de movimiento son ejemplos de la orden que sirve para desplazarse a una lnea determinada, y nos sirven para ilustrar lo bien que trabajan las rdenes de vi con argumentos numricos. Por ejemplo, podras desplazarte a la decimocuarta lnea del fichero tecleando 14G. De forma muy parecida, podras desplazarte al final del tercer prrafo contando desde tu posicin actual tecleando 3}. NOTA

Si usas teclado en Espaol, para conseguir, por ejemplo,el carcter { debers teclear de la misma forma que si usases el modo de insercin: AltGr + { , y funcionar. Igualmente, para ir al final con el comando 0G debers teclear: 0 + Maysculas y dejarla pulsada + G + soltar Maysculas ,ya que la G est en maysculas y pulsar 0g no funcionar. Si tienes BloqMays activado te bastar con teclear el "0" y la "G" Vi tambin te permite desplazar toda la pantalla sin mover el cursor de sitio (a menos que sea necesario, por supuesto):

Control + d: (pulsa y deja pulsada la tecla Control y pulsa la tecla d). Desplazar la parte visualizable del fichero una pantalla entera hacia abajo. Control + e: (pulsa y deja pulsada la tecla Control y pulsa la tecla e). Desplazar la parte visualizable del fichero una lnea hacia abajo. Control + u: (pulsa y deja pulsada la tecla Control y pulsa la tecla u). Desplazar la parte visualizable del fichero una pantalla entera hacia arriba. Control + y: (pulsa y deja pulsada la tecla Control y pulsa la tecla y). Desplazar la parte visualizable del fichero una lnea hacia arriba.

Las rdenes Control+d y Control+u desplazan toda la pantalla pero mantienen el cursor en la misma posicin de la pantalla (a pesar de que el texto que tuviesen debajo haya cambiado). Las rdenes Control+e y Control+y mantienen el cursor sobre el mismo texto en que estuvieran situadas, y hasta que esa lnea se salga de la pantalla. En ese momento el cursor se queda en la misma posicin pero el texto sobre el que est situado ser diferente.

Cortando, copiando y pegando en ViDe BibliaubuntuSaltar a navegacin, bsqueda

Resulta bastante fcil cortar y pegar texto usando un editor de texto grfico debido a que un editor de texto que use ratn permite copiar y cortar con una combinacin de ratn y pulsaciones en el teclado. Por supuesto, puedes hacer lo mismo en vi, pero se necesita un poquitn ms de conocimiento sobre las interioridades de vi. Cortar texto se hace

mediante las rdenes de borrado que vimos antes, ya que lo que realmente hacen es borrar el texto y colocarlo en una rea de almacenamiento interna (llamada memoria intermedia o buffer). Al tener el texto en esa memoria intermedia resulta posible volver a pegarlo hacia cualquier parte. El editor vi dispone de la orden y (de yank=tirar,arrancar) para copiar una zona de texto especificada hacia la memoria intermedia, de tal forma que puedes pegarla hacia cualquier otra parte. Como ocurre con la orden de borrar, puedes delimitar el rea que quieres copiar tecleando el comando y y posponindole una orden de movimiento de cursor. Por ejemplo, y$ copia hacia la memoria intermedia el texto desde la posicin actual del cursor hasta el final de la lnea. y} copia hacia la memoria intermedia todo el texto comprendido entre la posicin actual del cursor y el final del prrafo correspondiente. Si copias o borras ms de una lnea, en la parte inferior de vi se mostrar el nmero de lneas almacenadas en memoria intermedia. La figura 7.2 nos muestra el mensaje de vi, ejecutndose sobre una ventana xterm, despus de copiar el prrafo actual (de 16 lneas) hacia la memoria intermedia o bffer.

El editor vi nos muestra informacin sobre la operacin de copiado con el comando y

Evidentemente, cortar y copiar texto no sirve de nada si eres incapaz de pegarlo en alguna parte. Para pegar, vi dispone de los comandos p y P. Para pegar una nica lnea desde la memoria intermedia hacia la posicin actual del cursor, simplemente usa el comando p (es decir, pulsa la tecla "p"). Sin embargo, si copiaste varias lneas a la memoria intermedia, debers anteponer a p el nmero de lneas que deseas pegar. Si no recuerdas cuntas lneas quieres pegar y lo que quieres es pegar todas, usa el comando P (Maysculas + p).

Buscando y reemplazando texto en Vi

De BibliaubuntuSaltar a navegacin, bsqueda

El editor vi admite bsquedas de texto en posiciones anteriores o posteriores al cursor, cada bsqueda tiene su propia orden. Pulsando / y el texto a buscar, y luego Intro, vi buscar ese texto a partir de la posicin actual del cursor. La figura 7.3 muestra a vi dentro de una ventana xterm y a punto de iniciar la bsqueda de la cadena "Safari" dentro del texto. Si la encuentra, vi mueve el cursor hacia la posicin donde est dicha cadena y refresca la pantalla para mostrar el trozo adecuado del texto. Si no encuentra la cadena, vi muestra un mensaje de informacin y deja el cursor en donde estaba.

Bsquedas de cadenas de texto en vi

La orden ? es la contraria a /, provocando la bsqueda de una cadena en posiciones anteriores a la del cursor actual. Ambas rdenes son ejemplos del modo "lnea de comandos" de vi, en el cual cada pulsacin sobre el teclado posiciona el cursor en la lnea inferior de la pantalla, quedando a la espera de ms informacin. El modo de lnea de comandos de vi tambin admite una orden de reemplazo de textos que te permite buscar una cadena de texto y bien sea incondicionalmente o bien con ciertas condiciones determinadas, reemplazarla por otra. La orden es :%s/algo/cosa/, la cual buscara la primera cadena que coincidiera con algo y la sustituira por cosa. Posponiendo a la barra final / la letra g indicamos a %s que el reemplazo de caracteres debe hacerse globalmente (es decir, todas las coincidencias halladas en el fichero sufrirn la sustitucin, como :%s/algo/cosa/g). Si aadimos c haremos que vi nos vaya preguntando en cada coincidencia si realmente queremos hacer la sustitucin (: %s/algo/cosa/gc). La figura 7.4 nos muestra el reemplazo condicional de la cadena ingls por la cadena anglosajn. Las sustituciones condicionales de sta clase se suelen llamar operaciones de reemplazo con confirmacin, porque te piden confirmacin de las acciones de reemplazo a realizar.

Buscar y Reemplazar en vi

Advirtase que el aviso en el pie de la pantalla pide que confirmes (y) o deniegues (n) cada cambio, pero tambin admite un par de rdenes de movimiento del cursor. La operacin de reemplazo con confirmacin admite Control+e (desplazar toda la pantalla una lnea hacia abajo) y Control+y (desplazar toda la pantalla una lnea hacia arriba) para ver el contexto de la cadena y decidir mejor si conviene reemplazarla o no.

Deshaciendo cambios en ViDe BibliaubuntuSaltar a navegacin, bsqueda

A menos que seas un escritor perfecto, un programador sublime, y un ser inhumano que nunca comete un error, terminars corrigiendo un texto y pensando "Mecagoent, no quera hacerlo as". Por suerte, vi recuerda todas las rdenes previas y te permite deshacerlas todas, en orden, hasta que tu fichero queda en el mismo estado que estaba al principio. Para deshacer la ltima operacin que efectuaste en vi, usa el comando u (del ingls un-do, des-hacer). Cada comando u que teclees deshar una operacin previa. Algunas operaciones complejas, como las de buscar y reemplazar globalmente, se almacenan (y por tanto, se deshacen) como una nica operacin. Pero la mayor parte de las veces debers usar la orden u para deshacer una a una todas las rdenes dadas errneamente (tedioso pero necesario) hasta que tu fichero vuelva al estado original.

Usando ventanas mltiples en ViDe BibliaubuntuSaltar a navegacin, bsqueda Una de las quejas que se han oido durante ms tiempo sobre vi es que no admite varias ventanas. En aplicaciones orientadas al terminal tales como vi, las ventanas mltiples suelen ser vistas de varios ficheros en la misma aplicacin y al mismo tiempo, cada una con su propia barra de estado. Una de las historias ms antiguas y preferidas sobre vi es que aparentemente Bill Joy estaba trabajando sobre una versin multiventanas de vi, pero el cdigo fuente se perdi, y por eso vi nunca lleg a desarrollarse como aplicaciones multiventanas hasta la aparicin de las versiones modernas de vi, como es vim. En palabras de Joy, citadas en una entrevista aparecida en el nmero de Agosto de 1984 de la revista Unix Review: "...lo que ocurri realmente fue que estaba en pleno proceso de desarrollo para aadir multiventanas a vi y entonces instalamos nuestro VAX, all por Diciembre de 1978. No habamos hecho copias de respaldo y la unidad de cinta fall. Segu trabajando a pesar de no poder hacer copias de seguridad. Entonces el cdigo fuente se corrompi y no tena hecha copia del listado. Casi haba rehecho todo el cdigo de visualizacin de las ventanas, y eso fue lo que me hizo desistir. Despus de aquello, recuper la versin anterior y me limit a documentar el cdigo, terminar el manual y archivarlo definitivamente. Si no se hubiera fastidiado ese cdigo, vi tendra mltiples ventanas, y le hubiera aadido algn tipo de programabilidad...quin sabe.. Por suerte, la gente de vim resolvi el problema implementando varios comandos que permiten dividir la ventana actual, abrir otro archivo en otra parte de tu ventana vim, alternar cclicamente entre varios archivos mostrados en ventanas diferentes, y as... En la figura 7.5 vemos cmo vim muestra dos archivos diferentes en ventanas separadas, todo dentro de la misma sesin de vim. Recuerda que en Ubuntu, el editor vi es en realidad un enlace simblico a vim.

Dos ventanas de edicin en vi Las rdenes principales para manipular las ventanas de vi son las siguientes:

:hide: Cierra la ventana actual (slo funciona cuando tenemos varias ventanas en pantalla). :only: Cierra todas las ventanas excepto la actual. :split nombrearchivo: Divide la ventana horizontalmente, carga el archivo nombrearchivo y lo muestra en la nueva ventana. :sview nombrearchivo: Igual que :split, pero muestra el archivo en modo de slo lectura. :vsplit nombrearchivo: Divide la ventana verticalmente, carga el archivo nombrearchivo y lo muestra en la nueva ventana.

Aadimos una ventana dividida verticalmente tecleando :vsplit /etc/init.d/samba CONSEJO

Puedes iniciar vim en modo multiventana utilizando la opcin -o seguida por la lista de archivos que deseas abrir, como en el siguiente ejemplo:$ vim -o archivo1.txt archivo2.txt archivo3.txt archivo4.txt

Una vez que has creado varias ventanas, puedes moverte entre ellas y manipularlas con las siguientes rdenes, todas empiezan con Control+w:

Control+w Flecha Arriba: Mueve el cursor activo hacia la ventana situada por arriba de la actual. Si en vez de Flecha Arriba pulsas Flecha Abajo, Flec