PRÁCTICAS DE SISTEMAS OPERATIVOS I

EDITORES DE TEXTO


Una de las tareas más habituales que realizaréis en el servidor es la edición de ficheros. Bien sea porque queréis cambiar un fichero de configuración, bien sea porque estáis programando en el servidor, bien por otra razón. Cuando querráis editar un fichero, no os vale cualquier editor de textos. Por ejemplo, si hacéis vuestro programa favorito con el Word de Microsoft, el fichero resultante no compilará. El formato .doc no es un formato de texto plano, es decir, se han incluido dentro del fichero códigos de formato para el tipo de letra, configuración del documento y demás. Necesitáis un editor de textos que no dé formato adicional a los ficheros que genere. En las cuatro secciones que vienen a continuación exploraremos diferentes posibilidades.

Lograr un editor de textos adecuado no solucionará todos nuestros problemas. Si usamos caracteres propios del español, es decir, caracteres fuera del ASCII de 7 bits, el editor que usemos debe usar la misma codificación que nuestro sistema.

Pero incluso en el caso de que renunciemos a nuestros caracteres propios, aún nos esperan dificultades a la vuelta de la esquina. Dependiendo del tipo de sistema operativo, el carácter que indica el fin de una línea de texto puede variar. UNIX lo indica mediante un único carácter, cuyo código ASCII es el 10. Windows, por su parte, gusta de poner dos caracteres para ese mismo cometido, el propio 10 y otro, cuyo códico ASCII es el 13. No andáis descaminados si pensáis que otros sistemas usan solamente el 13... En esta imagen podéis ver cómo aparece un fichero editado en Windows en un editor de encina:
Fichero de Windows en vim
Finalmente, el código ASCII del tabulador (el 9) no es representado igual en todos los programas y aplicaciones. Algunos usan 8 espacios por cada tabulación, otros menos. Os recomendamos que no lo uséis si queréis que vuestros ficheros aparezcan igual en distintos sistemas. Usad espacios en blanco en su lugar.

Una vuelta de tuerca más: cuidado con los espacios en blanco. El espacio en blanco común tiene un código ASCII de 32 y es, más o menos, universal. Sin embargo, existe otro espacio en blanco, el espacio en blanco no separador (non-breaking space) que, en el ISO-8859-1, tiene el código 0xA0 y en UTF-8 0xC2A0. Este espacio en blanco se usa para indicar que, aunque se encuentre entre dos palabras, no queremos que se rompa la línea por ahí. Tratad, cambiando la anchura de la ventana del navegador, de separar estas dos palabras: kunta kinte. No lo lograréis. Hay colocado entre ellas un espacio en blanco no separador.

Como podéis comprobar, a simple vista, y sin hacer la prueba anterior, no somos capaces de distinguir un espacio en blanco normal de uno de estos espacios en blanco raros. Pero para el ordenador, que no tiene ojos, son caracteres completamente diferentes. Es normal que si se os cuelan estos espacios en vuestro código, el programa no compile y dé extraños errores en líneas aparentemente normales. Pero, ¿cómo se pueden colar estos visitantes indeseados? A veces ocurre cuando habéis editado un fichero con un editor de textos con formato (pues son dados a meterlos) y cortáis y pegáis el código en vuestro programa. Esta no es una buena técnica.
  1. Edición de textos para arriesgados

    Imaginaos en 1974, delante de uno de esos terminales en los que se basan los emuladores que usáis para conectaros con el servidor. Es un teclado rarísimo. No tiene flechas del cursor, ni tecla ALT, los símbolos no están en los lugares habituales... ¿Cómo podremos editar un fichero?

    En semejante ecosistema nació el primer editor que vamos a ver. Se llama vi y el objetivo de sus creadores fue poder controlar el editor sin necesidad de teclas especiales, sino solamente con las teclas alfanuméricas comunes. Esto hace que sea complicado de manejar, especialmente para alguien nuevo. Probémoslo. Para ello, id a vuestro directorio de conexión y teclead:
    <gyermo@ENCINA>/usuarios/profes/gyermo$ vim -N
    
    Os aparecerá la pantalla de bienvenida:
    Bienvenida de vi


    Si esto no os funciona es debido a que aún no habéis configurado bien vuestra cuenta. Probad con:
    <gyermo@ENCINA>/usuarios/profes/gyermo$ TERM=vt100 vim -N
    
    En realidad, el programa que se arranca en el servidor no es el vi original. Se trata de vim, una versión que, como su nombre indica (Vi IMproved) es una versión muy mejorada en la que, por ejemplo, además de las teclas originales, también funcionan las teclas del cursor, inicio, fin, etc.

    En la propia bienvenida se os indica la salida. Esto no es un detalle menor en estos editores antiguos. Si no os lo creéis, intentad salir de otro editor de la quinta de vi: emacs. Probad la forma de salir, pues. Teclead :q e Intro y habéis salido. Vamos a ver cómo funciona vi con un ejemplo. Editaremos un fichero al que bautizaremos villancico.txt:
    <gyermo@ENCINA>/usuarios/profes/gyermo$ vi -N villancico.txt
    
    El editor os dirá que se trata de un fichero nuevo. La opción -N sirve para que se porte bien con nosotros. Lo fundamental de vi es que tiene dos modos de funcionamiento principales, modo de órdenes y modo de inserción. Vi arranca en el modo de órdenes, así que lo primero que debemos aprender es a pasar de un modo al otro:

    Sabremos que estamos en el modo de inserción porque lo que tecleemos se mete en el fichero y porque aparece "-- INSERT --" en la esquina inferior izquierda de la pantalla. Probémoslo. Metamos la primera línea de nuestro villancico. Para ello, pasamos al modo de inserción y tecleamos:
    Prueba con vi


    Si vi es amable con nosotros no nos va a pedir salir del modo de inserción para poder mover el cursor, borrar con Supr, usar Ini, Fin, AvPág y RePág. En fin, que podemos hacer el trabajo de edición casi totalmente dentro del modo de inserción. Si queremos hacer algo más complicado, tendremos que salir al modo de órdenes. Dentro del modo de órdenes, diferentes teclas tienen diferentes significados: Aquellas órdenes que comienzan por : o / necesitan pulsar Intro al final. El resto, no.

    Otra de las complicaciones de vi es que en el modo de órdenes no es lo mismo mayúsculas y minúsculas y uno de los fallos más comunes es dejar en el modo de órdenes la tecla de Bloqueo de Mayúsculas activada, por lo que el editor empieza a hacer cosas raras.

    Pongamos en uso lo aprendido. En la siguiente línea, debemos poner ande, ande, ande, que es la Nochebuena.. En lugar de hacerlo del modo habitual, aprovechémonos de vi:
    1. Nos vamos a salir del modo de inserción
    2. Nos situamos en la línea donde vamos a continuar
    3. Entramos en el modo de inserción para añadir al final de la línea (A)
    4. Tecleamos "ande, ", pero sin las comillas
    5. Salimos del modo de inserción
    6. Pulsamos dos veces la tecla de repetición (.)
    7. Pulsamos la tecla A para añadir al final
    8. Tecleamos que es la Nochebuena e Intro
    Ya hemos conseguido nuestra segunda línea:
    Prueba con vi


    Como la siguiente línea se parece mucho a la primera, nos salimos del modo de edición, nos vamos a la primera línea, la copiamos (Y), bajamos a una línea antes de donde la queremos pegar y la pegamos (p). Entramos en el modo de edición y cambiamos lo que es diferente. Nos tiene que quedar así:
    Prueba con vi


    Completamos la líneas siguiente: que mañana es fiesta y al otro, también. Si anteponemos a la mayor parte de las órdenes de vi un número, el editor nos ejecutará la orden tantas veces como el número que hayamos antepuesto. Lo vamos a probar repitiendo la estrofa tal cual justo debajo. Para ello, nos ponemos en la primera línea desde el modo de órdenes con :1. A continuación, copiamos 6 líneas con 6Y. Nos ponemos en la última línea con :$. Pegamos lo que hemos copiado, con la tecla p. Este es el resultado de tan arduo esfuerzo:
    Prueba con vi


    Las órdenes de vi, al igual que las órdenes de UNIX son numerosas como las estrellas del cielo. Lo normal es que uno maneje aquellas que más usa o busque en la documentación cómo hacer tal o cual cosa. Lo cierto de estos editores es que, aunque parezca sorprendente, ocurre como el lado oscuro de la Fuerza. Algunos, una vez lo prueban, ya no vuelven. Las páginas web que estáis viendo, se han escrito con vi.
    Ejemplo de vi
  2. Edición de textos para pusilánimes

    Para aquellos que no gustéis de las emociones fuertes, un editor un tanto más convencional puede ser la elección ideal. pico es un editor simple, fácil de usar, con un solo modo de trabajo y que sus órdenes se logran con una combinación de teclas cuya ayuda aparece en la parte de abajo de la pantalla. pico no es software libre. Es por ello que se desarrolló un clon libre: nano, que podéis encontrar como alternativa en vuestros linuxes.

    Para probarlo, vamos a escribir una carta a los Reyes Magos. Creamos un directorio para ello e invocamos el editor:
    <gyermo@ENCINA>/usuarios/profes/gyermo$ mkdir CARTAS
    <gyermo@ENCINA>/usuarios/profes/gyermo$ cd CARTAS
    <gyermo@ENCINA>/usuarios/profes/gyermo/CARTAS$ pico ReyesMagos.txt
    
    Ejemplo de pico


    Si os aparece un error al intentar ejecutar pico, probad a especificar el nombre de un terminal sencillo. Más adelante veremos cómo hacer para no tener que especificarlo cada vez que arranquemos el programa. De momento, usad:
    <gyermo@ENCINA>/usuarios/profes/gyermo/CARTAS$ TERM=vt100 pico ReyesMagos.txt
    


    Experimentad un rato con pico metiendo el contenido que queráis en vuestra carta. Salid y guardarla, pues luego volveremos a ella al final de la sesión. Al hacer un ls -l, la tenéis que ver. En mi caso, ocupa 186 bytes:
    <gyermo@ENCINA>/usuarios/profes/gyermo/CARTAS$ ls -l
    total 2
    -rw-r--r--   1 gyermo   profes       186 ago 19 13:22 ReyesMagos.txt
    
  3. Edición de textos para gente fashion. X Window.

    Quizá os preguntéis si no existen editores de texto más de toda la vida: con sus menúes, sus diálogos de confirmación, etc. Editores de texto estándares que podáis encontrar en casi todos los UNIX con esas características no existen. Debéis daros cuenta de que, además, dichos editores, en modo de texto, es más difícil que pudieran responder al ratón. Para tener un editor de esas características, necesitamos trabajar en modo gráfico.

    Editores de textos gráficos muy extendidos en Linux son gedit (basado en las bibliotecas GTK) y kate (basado en las bibliotecas Qt). Pasad a Linux, si no estáis trabajando con él, para probar alguno de estos editores. Por ejemplo, gedit, un muy buen editor que viene instalado por defecto en Ubuntu:

    Ejemplo de gedit


    El problema si usáis el editor directamente así es que los ficheros que editéis no estarán en el servidor, sino en vuestra máquina local. Hay una solución a esto, aunque no está exenta de inconvenientes. UNIX nació con Internet y está adaptado de un modo natural a ello. Probemos a ver qué ocurre si arrancamos el gedit que tiene instalado el propio servidor:
    <gyermo@ENCINA>/usuarios/profes/gyermo/CARTAS$ gedit
    
    (gedit:27458): Gtk-WARNING **: cannot open display:  
    <gyermo@ENCINA>/usuarios/profes/gyermo/CARTAS$ 
    
    El servidor nos dice que no puede arrancar el programa porque es un programa gráfico y nuestro terminal es de texto. Pero hay una solución. Pero es necesario que estéis conectados desde Linux. Para probar la opción, primero desconectaros del servidor. Y ahora, os volvéis a conectar, desde un terminal de Linux, con la opción -X:
    ~$ ssh -X -l gyermo encina.fis.usal.es
    Password: 
    Last login: Fri Aug 19 13:06:51 2011 from avellano.fis.us
    Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
    <gyermo@ENCINA>/usuarios/profes/gyermo$ 
    
    A primera vista, nada ha ocurrido. Sin embargo, observad la magia:
    <gyermo@ENCINA>/usuarios/profes/gyermo$ gedit
    
    Ejemplo de gedit


    Es muy importante que entendáis lo que está sucediendo. Aunque la ventana que estáis viendo del editor gedit está en vuestro Linux local, el programa en sí se está ejecutando en el servidor. Prueba de ello es que, si hacéis como en la imagen, veréis y podréis abrir la carta a los Reyes Magos que acabáis de escribir. Como gedit es un editor gráfico, tiene menúes, podéis usar el ratón, todas las teclas del teclado, etc.

    Sin embargo, usar gedit de esta manera en el servidor presenta algún problema. Aunque las redes y los ordenadores no son los de antaño, servir aplicaciones gráficas genera mucho tráfico y consume recursos en el servidor. De estar el servidor muy ocupado, la respuesta se vuelve muy lenta. Es por ello que os aconsejamos que lo uséis en ocasiones contadas y, puede incluso, que haya que desactivarlo.

    El protocolo que usan las máquinas UNIX para servir aplicaciones gráficas por la red se llama Sistema X Window. Es muy cómodo porque permite manejar aplicaciones gráficas de un ordenador desde otro.

    Sigue un esquema cliente-servidor. Este esquema es muy usado en Internet. Cuando navegáis por la web, vuestro navegador (por ejemplo, Firefox) es el cliente que le pide páginas web a un ordenador remoto (por ejemplo, Google), que es un servidor. El propio servidor que estáis usando para hacer las prácticas es, como su nombre indica, un servidor. En este caso, os sirve ficheros, conexiones remotas, etc.

    Pues bien, en el caso de X Window, el servidor es justo al contrario. Es el ordenador que tiene una pantalla gráfica. Los clientes son las aplicaciones graficas que arranquéis. El servidor, que es el que proporciona las ventanas, es vuestro Linux y el cliente es el gedit de encina.

    Existen servidores X también para Windows, lo que os permitiría correr aplicaciones gráficas de un servidor o un Linux desde vuestro Windows, pero suelen ser de pago.

    Uno de los problemas que tiene el protocolo X es que es algo lento. No pretendáis ejecutar remotamente aplicaciones gráficas con una conexión por modem, o que sean aplicaciones de gran consumo gráfico (juegos, 3D, etc.). Una de las alternativas muy razonables es el producto de la empresa NoMachine (http://nomachine.com/). Tienen una versión gratis, que no libre, que podéis probar. Aunque no os funcionarán las aplicaciones 3D, el resto de aplicaciones tienen un rendimiento muy superior que con X solo, incluso con conexiones lentas.
  4. Edición de textos para gente de andar por casa. Transferencia de ficheros

    Una solución que siempre os va a funcionar cuando querráis editar un fichero del servidor consiste en tres sencillos pasos:
    1. Descargar el fichero a vuestro ordenador local
    2. Editarlo con vuestro editor favorito, de Linux o Windows
    3. Volverlo a subir, una vez editado, al servidor

    Sin embargo, no es un método muy recomendable, sobre todo para trabajo frecuente. Es muy fácil que se os olvide el tercer paso y, o bien perdáis información, o bien estéis trabajando en el servidor con una versión vieja del fichero, os falle por eso y no os deis cuenta.

    No obstante, y como también a veces será necesario que subáis o bajéis programas al o desde el servidor, os mostramos a continuación cómo hacerlo.

    Tanto en Windows como en Linux existen aplicaciones gráficas que os permiten muy fácilmente subir o bajar ficheros. El mismo Putty tiene una de ellas (PSFTP). Debéis usar una que disponga del protocolo SFTP (Secure File Transfer Protocol). Aquí veremos la aplicación estándar, en modo de texto, pues la encontraréis siempre en casi cualquier sistema que uséis.

    Adelante, pues. Desde un terminal de Linux recién abierto, nos vamos al directorio donde queremos bajar el fichero y nos conectamos al servidor, mediante sftp:
    gyermo@mirto:~/TMP/CARTA$ sftp gyermo@encina.fis.usal.es
    Password: 
    Connected to encina.fis.usal.es.
    sftp> 
    
    Observad que, para conectarse, se pone vuestro login de encina, una arroba (@) y el nombre del servidor. Introducid vuestra contraseña y el programa se conecta y queda esperando vuestras órdenes. Reparad en que, justo ahora, estamos enlazando el directorio local de vuestro Linux (en el ejemplo ~/TMP/CARTA con el directorio de conexión del servidor. No podemos confundir los dos extremos de la conexión. A partir de ahora, las órdenes que podemos dar se parecen mucho a las órdenes de UNIX. Por ejemplo, para ver dónde nos encontramos en cada extremo de la conexión, usamos:
    sftp> !pwd
    /home/gyermo/TMP/CARTA
    sftp> pwd
    Remote working directory: /usuarios/profes/gyermo
    
    Nos movemos al directorio donde escribimos la carta y vemos su contenido:
    sftp> cd CARTAS
    sftp> ls -l
    -rw-r--r--    1 gyermo   profes        186 Aug 19 13:22 ReyesMagos.txt
    
    Para bajarnos una copia de la carta, usamos get:
    sftp> get ReyesMagos.txt 
    Fetching /usuarios/profes/gyermo/CARTAS/ReyesMagos.txt to ReyesMagos.txt
    /usuarios/profes/gyermo/CARTAS/ReyesMagos.txt                                   100%  186     0.2KB/s   00:00    
    
    Ahora ya tenemos la copia aquí. Lo comprobamos:
    sftp> !ls -l
    total 4
    -rw-r--r-- 1 gyermo gyermo 186 2011-08-19 18:34 ReyesMagos.txt
    
    No tenemos más que modificarla, si queremos, y volverla a subir. La orden para subir es put:
    sftp> put ReyesMagos.txt 
    Uploading ReyesMagos.txt to /usuarios/profes/gyermo/CARTAS/ReyesMagos.txt
    ReyesMagos.txt                                                                  100%  186     0.2KB/s   00:00    
    
    El programa, dependiendo de su versión, tiene más o menos órdenes, pero las vistas son bastante estándares. Cuando hayamos acabado, nos despedimos educadamente del servidor:
    sftp> bye
    gyermo@mirto:~/TMP/CARTA$ 
    

© 2022 Guillermo González Talaván.