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


(?) El hombre de las respuestas (!)


Por: James T. Dennis, answerguy@ssc.com
LinuxCare, http://www.linuxcare.com/

Traducido al Español por: Javier Gomez Sierras
el día 29 de Agosto 2000, para La Gaceta de Linux


Contenidos:

(?)Win4Lin y www.linuxdoc.org/LDP/LG/issue50/tag/26.html --o--
Win4Lin eMERGE
(?)Extrayendo un bloque de texto de un fichero
(?)¿Por favor puede ayudarme ? --o--
Zipeando a través de la LAN
(?)accediendo a ficheros de windows --o--
Accediendo a Dispositivos/Discos Locales MS-DOS/Windows '9x desde Linux
(?)co-procesos --o--
Más sobre >> zsh Co-procesos
(?)¿Linux - AMD? --o--
Linux para AMD, Cyrix, etc
(?)pregunta rcp --o--
Un Usuario de UNIX prueba el 'rsh' de Linux
(?)Telnet
(?)administración de un sistema unix --o--
Familiarizándose con un Sistema UNIX
(?)NT OS/2 --o--
Conectando NT y OS/2
(?)¿controlar otro VT? --o--
"Controlando temporalmente un VT"
(?)pregunta sobre añadir pty's a mi entorno sunos --o--
Quedándose sin Pseudo-tty's
(?)xdm no inicia una sesión --o--
XFree 4.0 y Errores ":0.0 rechazado por servidor"
(!)FW: Linux
(?)¿Qué sistema de archivos? --o--
Determinando el Tipo de Cada Sistema de Archivos
(?)4 preguntas --o--
Cuatro Preguntas
(?)protocolo Kermit --o--
G-Kermit: El Paquete de transferencia Kermit GPL
(?)shell no puede ver un archivo que existe --o--
./script: No existe el fichero o el directorio
(?)hola
(!)Cerrando el "Demonio ping" --o--
Cerrando el Demonio Ping: Revisado
(?)ejecutar cualquier servidor X remoto en un host --o--
Ejecución Remota de Aplicaciones Gráficas

(?) Win4Lin eMERGE

De J. David Peet el jue, 30 Mar 2000

Hola,

Me topé con su artículo

www.linuxdoc.org/LDP/LG/issue50/tag/26.html que habla un poco (poquito) sobre Win4Lin.

Para su información, Win4Lin ya está disponible. Y si está interesado, la documentación completa está disponible en el sitio web de TreLOS. www.trelos.com. También puede hacer su pedido por medio de este sitio web.

En caso de que no lo supiera, la tecnología Win4Lin tiene una larga historia como "Merge" para SCO Unix. SCO ha sido un OEM de nuestra tecnología Merge durante años. Win4Lin es la versión para Linux de la tecnología existente actualmente.

(!) No lo sabía. Pensaba que DOS/MERGE era de una compañía llamada "Locus" o algo así.

(?) Una pequeña matización -- Win4Lin no es un "clon" de VMWare como tal. Ambos proporcionan una máquina virtual para ejecutar Windows en Linux, pero hay diferencias significativas. Le remito al nuevo documento de especificación ("white-paper"): http://www.trelos.com/trelos/Trelos/Products/Win4Lin_Whitepaper.htm Cerca del final hay dos párrafos que comparan y contrastan Win4Lin WINE y VMWare.

-Gracias -David Peet david.peet@trelos.com

(!) Probablemente no debería haber usado la palabra "clon" --- no es la palabra que mejor lo describe. Obviamente, considerando la herencia de Win4Lin sería más apropiado decir que VMWare es un "clon" del predecesor de Win4Lin. MERGE es el abuelito de los emuladores de MS-DOS para UNIX.
De todas formas, dejaré que sea la gente quien decida en base a su propia experiencia e interpretación.
En realidad no he usado ningún software DOS o MS Windows en años (sólo de forma ocasional, por fortuna, para ayudar a alguien aquí o allí con cosas sencillas). Por lo que incluso si me enviase una copia para que la evaluase no le puedo prometer que siquiera la pruebe. (Creo que tengo un CD de VMWare por aquí en alguna parte -- una copia de evaluación o algo así). Heather, mi editora y esposa, todavía usa MS-Windows de vez en cuando. Se que ha instalado DOSEMU, y WINE y los ha usado un poco (DOSemu intensivamente). Yo he instalado y jugado con DOSemu (le ayudé a alguien en una fiesta de instalación hace un par de semanas, también). Sin embargo, ¡nunca he probado WINE!
De todas formas, buena suerte con vuestra nueva versión.

(!) Win4Lin eMERGE

Respuesta de J. David Peet el jue, 30 Mar 2000

Jim Dennis escribió:

En caso de que no lo supiera, la tecnología Win4Lin tiene una larga historia como "Merge" para SCO Unix. SCO ha sido un OEM de nuestra tecnología Merge durante años. Win4Lin es la versión para Linux de la tecnología existente actualmente.

No lo sabía. Pensaba que DOS/MERGE era de una compañía llamada "Locus" o algo así.

(!) Si, yo estaba en Locus en los inicios de Merge. Ha sido un largo camino desde entonces con algunos extraños giros. Primeramente Locus se unió con Platinum, y Merge continuó su desarrollo , incluida la actual versión 4 de SCO Merge con soporte para win95. Entonces justo antes de que CA digiriese a Platinum, una compañía en Santa Cruz, DASCOM, compró (¡rescató!) la tecnología Merge a Platinum y contrató a algunos de los antiguos desarrolladores de Merge para formar una compañía llamada "TreLOS" para sacar adelante la tecnología incluyendo su porte a Linux. (Incluyan aquí música de peligro). Entonces antes de que TreLOS pudiera aparecer como compañia independiente, IBM compró DASCOM, por razones que no tienen nada que ver con Merge/TreLOS. Entonces en febrero IBM terminó el proceso de independización de TreLOS como compañía independiente. Actualmente somos una compañia (muy pequeña) privada SIN relación con IBM y SIN tecnología IBM. (IBM por alguna razón quiso que esto quedase claro). Una vez que escapamos de IBM nos llevó poco más de un mes establecer la insfraestructura para ser capaces de sacar la versión del producto. Fue el vernos involucrados en la adquisición por IBM de DASCOM lo que nos impidió terminar el producto el otoño pasado como habíamos planeado originalmente. Win4Lin 1.0 en realidad ha estado preparado desde hace meses. Todo ese tiempo no fue en vano porque IBM nos dejó tener un programa beta semisecreto extendido por lo que en realidad ha estado en uso real durante un buen periodo para ser la versión "1.0" del producto.
Y hasta aquí llega esta historia. Quizá más de lo que deseaba saber.

(?) ... De todas formas, buena suerte con vuestra nueva versión.

(!) -Gracias -David
P.D. Ahora que estamos lanzando Win4Lin 1.0, que nos reseñen es Algo Bueno. Por lo tanto si usted o Heather quieren realizar una reseña será facilísimo concretarlo.

(?) Extrayendo un bloque de texto de un fichero

De Tim Moss el jue, 30 Mar 2000

Estoy intentando extraer un bloque de texto de un fichero utilizando simplemente bash y utilidades estándar de shell (sin perl, awk, sed, etc). Tengo un patrón definitivo que puede señalar el principio y final o puedo fácilmente obtener los números de línea que indican el comienzo y final del bloque de texto en el que estoy interesado (el cual, por cierto, no conozco con anticipación. Sólo se dónde está en el fichero). No encuentro una utilidad o comando que extraiga todo lo que quede entre esos puntos. ¿Existe algo parecido?

Gracias

(!) awk y sed se consideran "utilidades estándar de shell". (Son parte de la espeficación POSIX).
La expresión en sed es simplemente:
sed -n "$inicio,${fin}p" ...
... si inicio y fin son números de línea.
Para patrones es más fácil usar awk:
awk "/$inicio/,/$fin/" ...
... Nota: inicio y fin son regexes (expresiones regulares) y ¡deberían ser elegidas con cuidado!
Sin embargo, ya que no quieres hacerlo de la manera sencilla, aquí tienes otras alternativas:
------------------ ADVENTENCIA: muy largo -------------------------
Si es un fichero de texto y simplemente quieres coger algunas líneas prueba con algo como esto:
	#!/bin/sh
	# shextract.sh
	#	extraer parte de un archivo entre un
	#	par de patrones globales 
	[ "$#" -eq "2" ] || {
		echo "Debe proporcionar los patrones inico y fin" >&2
		exit 1
		}
	begin=$1
	end=$2
	of="" ## flag de salida
	while read a; do
		case "$a" in
			"$inicio") of="true";;
			"$fin") of="";;
			esac
		[ -n "$of" ] && echo $a
		done
	exit 0
... aquí no se usan utilidades externas excepto el comando de prueba ('[') y posiblemente el comando 'echo' de versiones MUY antiguas de Bourne sh. Debería funcionar en cualquier derivado del Bourne shell. En bash son comandos internos.
Toma dos parámetros. Estos son patrones "globales" y NO expresiones regulares. Deberían ir entre comillas, especialmente si contienen comodines de shell (las expresiones ?, *, y [...]).
Lee algún buen libro de referencia de programación en shell (o incluso la sección 'case...esac' de la página man de bash que es bastante floja) para obtener detalles sobre la sintaxis de patrones aceptable. Fíjate en que debido a la forma en la que estoy usando esto podrías invocar este programa (llamémoslo shextract, por "shell extraction") así:
shextract "[iI]nicio|[Aa]rranque" "[Ff]in|[Ss]top"
... para extraer las líneas entre cualquier ocurrencia del término "inicio" o "Inicio" o "arranque" o "Arranque" y la subsecuente ocurrencia de "fin" o "Fin" o "stop" o "Stop."
Fíjate que puedo usar el simbolo de tubería (entrecomillado) en este contexto para mostrar "alternancia" (similar al uso que hace egrep del mismo objeto).
Este script podría ser fácilmente modificado para usar expresiones regulares en vez de patrones globales (aunque tendríamos que usar 'grep' para ello o confiar en una shell mucho más nueva como ksh '93 o bash v. 2.x para hacer esa tarea).
Esta versión en particular extraerá todas las regiones del fichero que quedan entre nuestros símbolos de inicio y fin.
Para detenernos después del primero tenemos que insertar una sentencia "break" en nuestro case "$fin") ...;;;. Para soportar una ocurrencia "enésima" del patrón deberíamos usar un argumento adicional. Para hacer frente a salidas degeneradas (casos donde los símbolos de inicio y fin pudiesen estar estropeados, anidados o superpuestos) deberíamos hacer un trabajo considerable mayor.
Como está escrito este ejemplo requiere exactamente dos argumentos. Solo procesará entradas de stdin y solo escribirá a stdout. Podríamos fácilmente añadir código para manejar más argumentos (los dos primeros son patrones, el resto son nombres de ficheros de entrada) y algunos selectores de opciones (para fichero de salida, solo una extracción por fichero, emitir errores si el patrón de fin se encuentra antes del patrón de inicio, emitir avisos si no se encuentra patrón de inicio ni subsecuente fin el cualquier fichero de entrada, dejar de procesar al encontrar cualquier error/aviso, etc).
Nota: mi exit 0 puede parecer supérfluo aquí. Sin embargo, impide que la shell termine con un valor que no sea "finalización con código de retorno distinto de cero -- exited with non-zero return value" o advertencias sobre ello. Eso se debe a que he usado test ('[') en el flag de salida dentro de mi bucle. En un caso normal eso habrá dejado un valor sin retorno a cero ya que el flag será de longitud cero para la parte del fichero DESPUÉS de que se encontrara el patrón de fin.
Nota: este programa es LENTO. (Eso es lo que consigues por pedirlo en sh). Ejecutándolo sobre mi fichero /usr/share/games/hangman-words de 38000 líneas (este portátil no tiene /usr/dict/words) tarda 30 segundos o apenas 1000 líneas por segundo en un P166 con 16Mb de RAM. ¡Un binario lo puede hacerlo mejor en MS-DOS en un 4Mhz XT!
FALLO (BUG): Si alguna línea comienza con - (guión) entonces tu versión de echo podría intentar tratar el principio de tus líneas como argumentos. Esto podría hacer que el comando echo analizase el resto de la línea en busca de secuencias de escape. Si tienes printf(1) disponible (incorporado en tu shell o como un comando externo) entonces podrías usar ese en vez de echo.
Para hacer esto basado en el número de línea más que en patrones podríamos usar algo más parecido a:
#!/bin/sh
# lnextract.sh
#       extrae parte de un fichero entre los
#       números de línea $1 y $2

        function isnum () {
                case "$1" in
                *[^0-9]*)
                        return 1;;
                esac
                }

[ "$#" -gt "2" ] || {
                echo "Se deben proporcionar los números de inicio y fin de línea" >&2
                exit 1
                }

isnum "$1" || {
                echo "el primer argumento (primera línea) debe ser un número entero" >&2
                exit 1
                }

isnum "$2" || {
                echo "el segundo argumento (última línea) debe ser un número entero" >&2
                exit 1
                }

begin=$1
end=$2

[ "$begin" -le "$end" ] || {
                echo "inicio debe ser menor o igual que fin" >&2
                exit 1
                }

shift 2
for i; do
	[ -r "$i" -a -f "$i" ] || {
			echo "$i debería ser un fichero regular y existente" >&2
			continue
			}
	ln=0
	while read a ; do
		let ln+=1
		[ "$ln" -ge "$begin" ] && echo $a
		[ "$ln" -lt "$end" ]   || break
		done < "$i"
	done
exit 0
Este ejemplo pequeño y bastante feo hace un poco más de chequeo que el anterior.
Comprueba que los dos primeros argumentos sean números (para ello tu shell debe soportar carácteres negados, ksh '88 y posteriores, bash 1.x y 2.x, y zsh todas lo cumplen),y que el primero sea menor o igual que el segundo. Entonces se desplazan los argumentos (con "shift") para poder iterar sobre los demás, extrayendo nuestro intervalo de línea de cada uno. Comprueba que cada fichero sea "regular" (ni directorio, socket, o dispositivo nodal) y con permisos de lectura antes de intentar extraer una porción de él. Seguirá enlaces simbólicos (symlinks).
Tiene las mismas limitaciones que vimos antes.
Además no aceptará su entrada de stdin (aunque lo podríamos añadir poniendo el bucle principal en una función de shell e invocarlo de una manera si nuestra número de arg fuera exactamente dos, y de forma diferente (dentro de nuestro bucle) si $# es mayor que dos. No me apetece hacer esto aquí --- ya que este mensaje es ya bastante largo y ese ejemplo es suficientemente complicado.
También es posible usar una combinación de 'head' y 'tail' para hacer esto. (Es un ejercicio común en clases de programación en shell). Simplemente usarías algo así:
head -$inicio $fichero | tail -$(( $fin - $inicio ))
... ten en cuenta que el comando 'tail' en muchas versiones de UNIX no puede manejar offsets arbitarios. Solo puede manejar las líneas que quedan en un bloque de tamaño fijo. GNU tail es algo más robusto (y consecuentemente más grande y complicado). Una forma clásica de trabajar sobre las limitaciones de tail fue usar tac (hacer el cat de un fichero hacia atrás, desde la última línea hasta la primera) y head (y hacerle un tac otra vez). Esto podría usar cantidades prodigiosas de memoria o espacio de disco (podría usar ficheros temporales).
Si no quieres una salida orientada a líneas --- y tus patrones son expresiones regulares, y estas dispuesto a usar grep y dd entonces aquí tienes una aproximación diferente:
		start=$(grep -b "$inicio" ... )
		stop=$(( $( grep -b "$fin" ... ) - $inicio ))
		dd if="$fichero" skip=$inicio count=$stop bs=1b
Esto no es un shell script, es simplemente un ejemplo. Obviamente tendrías que inicializar $inicio, $fin, y $fichero o usar $1, $2, y $3 para las anteriores para convertir esto un script. Tambien tendrías que modificar esos comandos grep -b un poquito (fíjate en mis elipses). Esto se debe a que grep nos dará demasiada información. Dará un desplazamiento a nivel de octeto (byte offset) al inicio de cada concordancia con el patrón, y también imprimirá en pantalla la línea encontrada.
Podemos arreglar esto con un poco de trabajo. Asumamos que que queros la primera aparición de "$inicio" y la última de "$fin" Aquí estan los comandos que nos darán los números:
		grep -b "$inicio" "$fichero" | head -1 {
			IFS=:
			read b x
			echo b
			}

		grep -b "$fin" "$fichero" | tail -1 | {
			IFS=:
			read e x
			echo e
			}
... fíjate que simplemente he hecho un grep a través de head o tail para obtener la primera o última línea que concuerde, y uso IFS para cambiar mi separador de campos a un ":" (que grep usa para separar el valor de desplazamiento del resto de la línea). Leo la línea en dos variables (separadas por el/los caracter(es) IFS), y me deshago de los datos extraños simplemente haciendo un echo de la parte que quería (el desplazamiento de octeto) de vuelta a mi subshell.
Nota: cuando quiera que uses o veas el operador tubería en un comando de shell o script --- deberías darte cuenta que has creado un subshell implícito para manejar eso.
Ocasionalmente, si tus patrones tuvieran un - (guión) delante entonces tendrás problemas al pasarlos por grep. Puedes preparar el patrón un poco envolviendo el primer carácter entre corchetes. De este modo "foo" se convertiría en "[f]oo" y "-bar" sería "[-]bar". (grep no considerará un argumento que empiece con un [ como una opción de la línea de comandos, pero sí intentaría analizar -bar como tal).
Esto se consigue fácilmente con printf y sed:
		printf "%s" "$patrón" | sed -e 's/./[&]/'
... recuerda mi advertencia previa sobre 'echo' --- es bastante permisivo con argumentos que comienzan con guiones que no reconoce, simplemente hará un echo de aquellos sin error. Pero si tu patrón comienza con "-e " o -n puede afectar a la forma en que el resto del patrón sea representado.
Ten en cuenta que el grep y echo de GNU NO parecen tomar la opción -- que viene incluida con algunas utilidades GNU. Esto evitaría todo el tema de los guiones que preceden al patrón ya que esto marca convencionalmente el final de todo el análisis de los selectores/opciones disponibles.
Por supuesto dijiste que no querías usar sed, por lo que has hecho el trabajo más duro. No imposible, pero si más duro. Con shells más nuevas como ksh '93 y bash 2.x podemos usar algo como:
		[${patrón:0:1}]${patrón:1}
(lee cualquier buen libro reciente sobre progamación en shell para aprender sobre la expansión de parámetros).
Puedes utilizar la antigua utilidad 'cut', o 'dd' para obtener estas subcadenas. Por supuesto esas son tan externas al shell como perl, awk, sed, test, expr y printf.
Si realmente querías hacer esto último (obtener subcadenas de tamaño específico del valor de una variable, iniciando desde un punto determinado en la cadena, usando solo las primitivas de expansión de parámetros de bash 1.x) podría hacerse armándonos un lío. Yo usaria ${#varname} para obtener el tamaño, un bucle para crear cadenas temporales de caracteres ? (cerrar interrogación) del tamaño correcto y los operadores ${foo#} y ${foo%} (quitando patrones a izquierda y derecha del valor de la variable respectivamente) para aislar mi subcadena.
¡Puaj! Realmente es tan feo como parece.
De todas maneras. Creo que ya he hablado demasiado sobre este asunto por ahora.
Estoy seguro de que puedes hacer lo que necesitas. Gran parte de ello depende del tipo de shell que uses (no ya csh vs. Bourne, sino ksh '88 vs. '93 y bash v1.14 vs. 2.x, etc) y también lo rígido que seas sobre esa restricción sobre las "utilidades estándares"
Todos los ejemplos expuestos aquí (excepto los de la expansión de parámetros ${foo:}) son compatibles con bash 1.14.
(Por cierto: ahora que estoy aprendiendo realmente C --- todos vosotros podeis o descansar porque voy a dejar de lado la sintaxis de sh por un tiempo, o no poder dormir por temor a lo que vaya a escribir el próximo mes).
Aquí tienes un pequeño programa en GNU C para imprimir un conjunto de líneas entre un número y otro:
/* extraer una porción de un fichero desde una línea inicial, hasta
 * alguna línea final
 * esto funciona como un filtro --- no toma una lista
 * de argumentos de nombre de fichero.
 */

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int
main (int argc, char * argv[] )
{
char * linestr;
long begin, end, current=0;
ssize_t * linelen;


linelen = 0;
linestr=NULL;

if ( argc < 3 ) {
	fprintf(stderr, "Uso: %s inicio fin\n", argv[0]);
	exit(1);
	}

begin=atol(argv[1]);
if ( begin < 1 ) {
	fprintf(stderr, "Error en argumento: %s debería ser un número "
			"mayor que cero\n", argv[1]);
	exit(1);
	}

end=atol(argv[2]);
if ( end < begin ) {
	fprintf(stderr, "Error en argumento: %s debería ser un número "
			"mayor que arg[1]\n", argv[1]);
	exit(1);
	}

while ( getline(&linestr, &linelen, stdin ) > -1
	  && (++current < end ) ) {
	if (current >= begin) {
		printf("%s", linestr);
		}
	}

exit(0);
return 0;
}
Este programa tiene una longitud parecida al mismo en versión shell. Usa atol() más que strtol() para la conversión de argumento a número. atol() (de ASCII a long) es más simple, pero no puede devolvernos los errores. Sin embargo, yo requiero valores mayores que cero, y GNU glibc atol() devuelve 0 para cadenas que no pueden ser convertidas a long. También uso la función GNU getline() --- que no es estándar, pero sí mucho más conveniente y robusta que liarse con el tema de scanf(), fgets() y sscanf(), y getc().
Tim, he copiado esto a mi editor de la Gazeta de Linux, ya que es un pregunta bastante general y una respuesta bastante detallada. A menos que tengas alguna objección irá en mi columna del próximo número. La dirección de correo del remitente y su organización son simpre borrados en el artículo del hombre de las respuestas a menos que se indique lo contrario.

(?) Zipeando a través de la LAN

De jashby el dom, 02 Abr 2000

Hola ,

Mi nombre es Jason Ashby y trabajo para una compañía de ordenadores y Linux es realmente nuevo para mí me han dado la tarea de hacer una zip visible a través de una red, está instalada en una máquina con linux y puedo hacer que la máquina AIX la monte pero no pueo copiar ficheros desde o en la unidad zip en la AIX podrías dentro de tu poder decirme por qué .

Gracias Jason Ashby

(!) Desafortunadamente tu pregunta no es clara. No me dices que sistema se supone que es el servidor, que clase de sistemas van a ser los clientes, ni qué tipo de sistema de archivos habrá en el dispositivo Zip.
"hacer una zip visible a través de [sic] una red"
... presumiblemente quieres decir via NFS o Samba. Si tus sistemas clientes son UNIX o Linux tendrías que usar NFS, si son MS-Windows o OS/2 entonces Samba. (Si fueran Apple Macs usando MacOS tendrías que buscar los paquetes netatalk o CAP, y si fueran máquinas con un antinguo MS-DOS deberías intentar instalar los drivers para clientes Netware en cada una y mars_nwe o una copia comercial de Netware en la máquina con Linux).
Asumamos que tú lo que quieres es montar los discos Zip en tu máquina Linux, y "exportarlos" (terminología NFS) a tus sistemas AIX. Entonces deberías modificar tu /etc/fstab para que contenga una entrada apropiada para montar el dispositivo Zip en tu jerarquía de ficheros. Quizá deberías montarla bajo /mnt/zip o bajo /zip. (Podrías tener múltiples entradas en el fstab para soportar diferentes sistemas de archivos que tubieras instalado en tu dispositivo Zip. En la mayoría de los casos usarás msdos, o una de las variantes de sistemas de archivos MS-DOS para Linux: umsdos, vfat, o uvfat).
Entonces editarías tu fichero /etc/exports para exportarlo a tu LAN (o a hosts o patrones de red/dirección IP específicos).
Intenta leer las páginas man de /etc/fstab y /etc/exports y leer con atención los siguientes HOWTOs:
Zip Drive Mini-HOWTO
http://www.linuxdoc.org/HOWTO/mini/ZIP-Drive.html
NFS HOWTO
http://www.linuxdoc.org/HOWTO/NFS-HOWTO.html
Y uno nuevo que es excelente:
Filesystems HOWTO
http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html
de Martin Hinner.
Si esto no te sirve de solución, intenta clarificar tu pregunta. Siempre sirve de ayuda que pintes un pequeño mapa (¡el arte ASCII es bueno!).

(?) Accediendo a Dispositivos/Discos Locales MS-DOS/Windows '9x desde Linux

De David Buckley el mie, 05 Abr 2000

Soy nuevo en linux y me pregunto si hay alguna forma fácil de acceder a mi disco Win98 desde linux. Tengo muchos ficheros (mp3s, etc.) que me gustaría usar en linux. ¿Cuál es el método más fácil para obtenerlos?

Gracias, David Buckley

(!) Supongo que estás hablando de acceder a ficheros que están en tu sistema local (que tienes una instalación con arranque dual).
En ese caso usa el comando 'mount'. Por ejemplo la primera partición de tu primer disco IDE es /dev/hda1 (en Linux). Si ese es tu disco C: bajo MS-DOS/Windows entonces puedes usar este comando:
	mkdir /mnt/c && mount -t vfat /dev/hda1 /mnt/c
... (como usuario 'root') para hacer que aparezca el directorio C: en /mnt/c.
Una vez que hallas hecho eso puedes usar los comandos normales de Linux y programas para acceder a esos ficheros.
Ese comando sólo montará el sistema de archivos durante esa sesión (hasta que reinicies o lo desmontes con el comando 'umount'). Sin embargo, puedes automatizar este proceso añadiendo una entrada a tu /etc/fstab (tabla del sistema de archivos).
Para más información sobre este tema lee las secciones apropiadas de la Linux: Instalación y Primeros Pasos (*), y la System Administrator's Guide (*) (ambas parte del LDP en inglés en http://www.linuxdoc.org y en español en http://lucas.hispalinux.es ) y las páginas man mount(8), y fstab(5) con el siguiente comando:
       man 8 mount; man 5 fstab
(Fíjate, en el primer caso necesitas especificar el capítulo del manual/número de sección, 8, ya que existe una llamada de sistema llamada mount() usada por programadores, particularmente para escribir programas como el propio comando'mount'). Cuando veas referencias a palabras clave con este formato patatín(1), es una referencia a que patatín está documentado en ese capítulo de las páginas del manual: 1 son comandos de usuario, 2 llamdas de sistema, 3 funciones de librerías, 4 para dispositivos, 5 para formato de ficheros, etc).
*( LIGS: Chapter 4 System Administration
http://www.linuxdoc.org/LDP/gs/node6.html#SECTION00640000000000000000
LSAG: Filesystems http://www.linuxdoc.org/LDP/sag/x1038.html )
Para acceder a tus disquetes formateados bajo MS-DOS normalmente es más fácil usar los comandos de las mtools. Mira en las páginas man de mtools(1) para saber más sobre este tema.
Aquí tienes un par de otros HOWTOs (COMOs) que deberías leer (en inglés), y en español tienes la página oficial en http://www.insflug.org.
De DOS/Windows a Linux HOWTO
http://www.linuxdoc.org/HOWTO/DOS-Win-to-Linux-HOWTO.html
Sistemas de archivos HOWTO
http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html
En general quizá quieras dedicarles una lectura para encontrar respuestas a las preguntas más comunes de Linux. Como podrás imaginar, has preguntado una muy común). De hecho es la número 4.2 en las FAQ http://www.linuxdoc.org/FAQ/Linux-FAQ-4.html#ss4.2
También puedes realizar búsquedas en la Linux Gazette (edición en inglés) :
Búsqueda completa en el archivo de búsqueda de la Linux Gazette
http://www.linuxgazette.com/wgindex.html
Aunque intuyo que no sabrás que términos buscar hasta que hallas comprendido algunos de los conceptos básicos de las guías del LDP, o cualquier buen libro sobre Linux.
También hay otras maneras de acceder a tus "recursos compartidos" de Win '9x (ficheros accesibles de red, o directorios "exportados") desde Linux usando smbfs.

(?) Más sobre >> zsh Co-procesos

De Paul Ackersviller el mie, 05 abr 2000

Jim,

creo que olvidé darte las gracias por haber escrito la respuesta original tal y como lo hiciste. He programado shell durante años, pero nunca había tenido la ocasión de usar coprocesos. Poder ver ejemplos de cómo se hace es siempre algo bueno.

-- Paul Ackersviller

(!) De nada. En realidad nunca los he usado. Sin embargo, me animé a aprender cómo funcionaban en realidad cuando alguien con quien estaba trabajando me enseñó un ejemplo.
Algunas veces me aprovecho de ser el "Hombre de las respuestas" y aprovecho cualquier pretexto para mostrar algún truco nuevo que he descubierto o que me han enseñado (suelo intentar poner en los créditos a quien se lo merece --- pero algunas veces es bastante ambiguo y no encaja bien en lo que estoy escribiendo).
De todas formas, creo firmemente que hay que tener una caja de herramientas completa. Normalmete no sabrás que herramienta debería solucionarte el problema hasta que hayas visto la suficiente variedad de herramientas como para reconocer un clavo frente a un tornillo y poder asociar uno con un martillo y el otro con un destornillador.

(?) Linux para AMD, Cyrix, etc

De Ranone7 el mie, 05 abr 2000

En este sitio web http://www.linuxmall.com/product/01462.html leo el titular "Red Hat Linux Deluxe for Intel" ¿Hay algím Linux para AMD? o puedo usar la versión de linux de arriba con un AMD-Athlon.

Gracias

(!) El encabezado es comprometido. Intenta no sonar demasiado técnico. Red Hat Linux para Intel debería funcionar en cualquier procesador x86 y compatible. Fíjate que Mandrake requiere al menos Pentium (no funcionará en antiguos 486 y 386).
Lo que Red Hat Inc intentaba hacer con esta forma de hablar es distinguir entre las diferentes versiones disponibles para los sistemas basados en SPARC y Alpha. Al final también tendrán una versión para PowerPC disponible.
Muchas otras distribuciones están disponibles de la misma manera en varias plataformas.

(!) ¿Linux - AMD?

Respondido por Martin Pool el jue, 06 abr 2000

El mie, 5 abr 2000, Jim Dennis escribió:


>En este sitio web > >http://www.linuxmall.com/product/01462.html leo el
>titular "Red Hat Linux Deluxe for Intel" ¿Hay algún
>Linux para AMD? o puedo usar la versión de linux de arriba con un
>AMD-Athlon.


>Gracias

El encabezado es comprometido. Intenta no sonar demasiado técnico. Red Hat Linux para Intel debería funcionar en cualquier procesador x86 y compatible. Fíjate que Mandrake requiere al menos Pentium (no funcionará el antiguos 486 y 386).

Buena explicación. Los IIRC Athlon sólo están soportados en 2.2.algo, por lo que también necesitarán una distribución reciente. Supongo que cualquier versión a la venta hoy en día será adecuada, pero notablemente Debian slink/estable no arrancará.

(!) Gracias por ese apunte [de uno de las personas en la lista Linuxcare que ahora recibe las respuestas del hombre de las respuestas].
Recuerdo haber escuchado algo sobre problemas con el Athlon, pero nunca me enteré de la historia completa. Me he dejado llevar por el hecho de que la mayoría de chips compatibles x86 son realmente COMPATIBLES x86. Todavía no se cuál es el problema general con el chip Athlon. Le mandaré una copia de este correo a alguien a ver si me puede dar una pista.

(!) ¿Linux - AMD?

Respondido por David Benfell el jue, 6 abr 2000

La historia, tal y como la he podido recomponer, es que el problema se encontró y se arregló en el núcleo 2.3.19. La corrección tenia que ver con el código Memory Type Range Register (MTRR). Este parche fue portado también al núcleo 2.2.12, y, casi seguro, al núcleo 2.2.13.
Sin embargo, parece que todavía ha habido problemas con la distribución Mandrake 6.5, que tenía el núcleo 2.2.12. Por otra parte, mi vecino instaló Red Hat 6.2, con, creo, el núcleo 2.2.12 (pero el sitio no te lo dice), en un Athlon. Por lo que no estoy seguro.
David Benfell
[
Pues, si sabes algo más del misterio del la MTRR del Athlon, ¡acláranoslo por favor!

-- Heather. ]


(?) Un Usuario de UNIX prueba el 'rsh' de Linux

De Le, Dong, ALNTK el vie, 07 abr 2000

Hola "Hombre de las respuestas",

Mi nombre es Dong Le. Linux es bastante nuevo para mí. Ya que vengo del mundo Unix, intento usar los conceptos Unix aplicados a Linux. Algunas veces funciona, y la mayoría no.

De todas formas, tengo la Redhat 6.1 instalada en mis 2 PC basados en intel. Intento usar rcp para copiar archivos remotamente de un PC a otro. Obtengo el error: "permiso denegado" del otro PC. Tengo puesto el fichero ".rhosts" para dar permiso a otro PC. Uso el "formato octeto" en todos los ficheros/comandos por lo que DNS/NIS no estan para nada implicados.

Mis preguntas son:

- ¿Por qué tengo este error?

- Más tarde descubrí que Linux esta utilizando PAM para hacer la autentificación. Para rcp, usa /etc/pam.d/rsh.conf para autentificar. Sin embargo, no encuentro ninguna información sobre los módulos PAM (pam_rhosts_auth.so, por ejemplo) respecto de cómo funciona. ¿Sabes dónde puedo obtener información sobre los módulos PAM?

Muchas gracias, Dong Le,

(!) Respuesta corta: ¡Usa ssh!
En este caso tenemos unos cuantos problemas. Primero, he visto versiones de rshd (el demonio rsh) que parecían no aceptar direcciones en octeto. Más importante aún muchas distribuciones de Linux están configuradas para no respetar tus ficheros ~/.rhosts.
Estás en lo cierto cuando dices que tienes que coordinar tus políticas usando el PAM si tu sistema tiene el conjunto de programas "Pluggable Authentication Modules" instalada. El fichero de configuración sería /etc/pam.d/rsh. Aquí tienes lo que Debian instalaría por defecto:
#%PAM-1.0
auth	required	pam_rhosts_auth.so
auth	required	pam_nologin.so
auth	required	pam_env.so
account	required	pam_unix_acct.so
session	required	pam_unix_session.so
Lo tuyo debería ser similar.
Además puede que necesites modificar los argumentos de la línea del in.rshd en tu fichero /etc/inetd.conf. Por ejemplo si hay una opción -l podría estar haciendo que tu copia de in.rshd ignore los ficheros ~/.rhosts del usuario. La opción -h lo forzará a ignorar los contenidos de cualquier fichero /etc/hosts.equiv.
(Los nuevos paquetes rshd de Debian ignoran estas opciones adicionales y requieren que configures tu política a través de los ficheros /etc/pam.d/. No se si Red Hat ha modificado sus paquetes de esta manera en las versiones 6.1 o 6.2. En la 6.0 estoy bastante seguro de que se podían usar los argumentos de la línea de comandos en la entrada in.rshd del fichero /etc/inet.conf para hacer esto).
Por supuesto puedes usar ssh como sustituto de rsh, y tener también una seguridad mucho mayor.

(?) Telnet

De Cleary, James R. el vie, 07 Abr 2000

Jim,

acabo de instalar Redhat 6.0 en mi máquina. Puedo hacerle ping

a la máquina desde otra máquina, pero no puedo hacerle telnet, la configuración por omisión debería permitirlo, ¿no? Cualquier tipo de ayuda será fantástica.

Sinceramente, "J.C."

(!) Cuando dices que "no puedes hacerle telnet" ¿qué quieres decir? ¿El cliente telnet se queda sin hacer nada durante largo tiempo? ¿Obtienes algún mensaje que diga "connection refused -- conexión rehusada"? ¿Aparece enseguida este mensaje, o tarda un minuto o dos? ¿Estás intentando hacer telnet por su nombre, o por dirección IP? (Eso básicamente no importa siempre que uses el mismo formato para tu ping).
No estoy de acuerdo con tu afirmación que la "¿configuración por omisión debería permitirlo?" Linux está dirigido a una rango mucho más amplio de usuarios que el tradicional sistema unix gestionado por profesionales. No es apropiado asumir que todo los usuarios quieren ser "máquinas servidoras de telnet" (servidores o estaciones multiusuario). Además telnet es un medio de acceso remoto antiguo y básicamente en desusuo.
(Bueno, debería estar en desusuo).
Probablemente deberías usar ssh, STEL, ssltelnet, o instalar un Kerberos o la FreeS/WAN IPSec para poseer una conexión entre tu cliente y servidor encriptada, no falsificable (spoof) y a salvo de sniffers.
Por favor no respondas con "pero es que estoy detrás de un cortafuegos" o "es que es sólo la máquina de casa". Esas son las actitudes "de aveztruz" que crean una insfraestructura frágil (un pequeño crack y el muro entero se colapsa).
De todas formas, si has decidido que telnet es realmente lo que necesitas, que se adecua a tus requerimientos y se adapta a tu política de manera satisfactoria, entoces aquí tienes algunos apuntes para resolver fallos comunes. También son aplicables a ssh, STEL, etc.
Dijiste que 'ping' funciona. Asumiendo que estás usando los comandos desde el mismo host y usando el mismo formato de llamada/dirección para tus comandos 'ping' y tu 'telnet' aquí tienes los problemas más típicos:
* Tu sesión en realidad no está fallando. Puede que simplemente tarde mucho tiempo. Busca el los números anteriores de esta sección la frase "double;reverse;dns" y encontrarás varias de mis explicaciones previas sobre una causa común de este retraso (y algún consejo sobre que hacer con ello) Aquí tienes un par de ellos:
Issue 45: More "Can't Telnet Around My LAN" Problems
http://www.linuxgazette.com/issue45/tag/11.html
Issue 38: Telnetd and pausing
http://www.linuxgazette.com/issue38/tag/32.html
Issue 30: tv cards and dual monitor
http://www.linuxgazette.com/issue30/tag_tvcard.html
* Quizás no tengas instalado el paquete del daemon telnet
en tu host destino. Puede que esté instalado pero no correctamente configurado en /etc/inetd.conf. Este debería contener una línea parecida a esta:
telnet		stream	tcp	nowait	telnetd.telnetd	/usr/sbin/tcpd	/usr/sbin/in.telnetd
* Quizás no estés ejecutando inetd. (Es el demonio, programa de
servicio, que lee el /etc/inetd.conf, escucha las peticiones a esos puertos, y llama a los distintos programas de servicio que se encargan de esos servicios).
(Una posibilidad remota es que algo no funcione correctamente en tu gestor de nombres de servicio. Tu sistema debería normalmente relacionar nombres de servicio/protocolo a los números de puerto IP y a los protocolos de la capa de transporte (TCP, UDP, etc) usando el fichero /etc/services. Si está corrupto, o si tu /etc/nsswitch.conf apunta a tus librerías NSS por mencionar alguna situación rara y corrupta sería posible que inetd terminara escuchando los puertos erróneos para muchos servicios. Nunca he visto a nadie con semejante lio -- pero estoy seguro de que es posible).
* Quizás halla un cortafuegos o sistema de filtrados de paquetes entre
tu cliente y tu destino. Eso permitiría que pasase ICMP (tráfico 'ping') mientras se bloquea el tráfico TCP ('telnet' en el puerto 23).
* Es posible que tu programa cliente telnet, o una
de las librerías esté estropeada, o que tengas algunos valores degenerados en tu entorno o incluso en tu propio fichero .telnetrc. El cliente 'telnet' intercambia una serie de importantes variables de entorno con el demonio al que se conecta. Estas son para configurar el tipo de terminal, establecer los valores como tu nombre de usuario y el DISPLAY, tu huso horario, y otras cosas. Es posible (aunque poco probable) que pudieras estar tropezando con algo que al 'in.telnetd' de tu destino no le gusta).
Con un poco de suerte quizás esto te sirva de ayuda.
Cuando se pregunta sobre este tipo de problemas es importante ser bastante específico sobre el modo de fallo (los síntomas). Es MUY importante capturar y citar cualquier mensaje de error que aparezca y explicar exactamente qué comando(s) ejecutaste para obtener esos síntomas.
Desafortunadamente redactar una buena pregunta es algunas veces más difícil que responderla. (De hecho en muchas ocasiones he conseguido dar con la respuesta mientras estaba escribiendo la pregunta que iba a enviar. El proceso o la descripción rigurosa del problema me ha conducido muchas veces a mis propias respuestas. De todas formas, algunas veces envio el mensajes con la solucion).
Un consejo para resolver el problema. Comenzar con un 'ping' es una buena idea. Básicamente elimina varios de los posibles problemas en lo que se refiere a la parte de bajo nivel "¿está la tarjeta de red configurada y el cable enchufado a ella?" de tu problema. También es bueno hacer un 'traceroute' al destino. Esto puede mostrate que tus paquetes son ruteados a través de alguún dispositivo inesperado que está filtrando parte de tu tráfico.
Si tienes acceso a la consola del servidor destino (incluyendo un "carbon proxy" --- una persona al teléfono delante de ésta) entonces puedes ejecutar (o lo puede hacer el proxy) el comando 'tcpdump'. Esto puede mostrarte las cabeceras de cada paquete que atraviesa un determinado interfaz de red. 'tcpdump' tiene un pequeño lenguaje para describir el tipo exacto de tráfico que quieres ver y filtrar el resto que no quieres. Si buscas en los archivos de ésta sección la palabra 'tcpdump' deberías encontrar varios ejemplos sobre cómo usarlo. Debería ser algo así:
    tcpdump -i eth0 -n host $TUCLIENTE and port 23
... por ejemplo. (El puerto 23 de TCP es el estándar para el tráfico del telnet).
Si eso no funciona, puedes considerar reemplazar temporalmente tu 'in.telnetd' con un script monitor ('strace' wrapper script). Básicamente simplemente renombra el fichero in.telnetd como in.telnetd.real y crea un shell script (ver bajo) para monitorizarlo:
#!/bin/sh
exec strace -o /root/testing/telnet.strace /usr/sbin/in.telnetd.real
Ya he descrito otras veces este proceso. Aquí tienes un enlace a anteriores respuestas:
Issue 20
http://www.linuxgazette.com/issue20/lg_answer20.html
Issue 17
http://www.linuxgazette.com/issue17/answer.html
(utiliza la función "buscar el página" de tu navegador -- [Alt][F] o [Ctrl][F] en Netscape y la tecla / en Lynx para buscar 'strace' y encontrar los mensajes de los que estoy hablando. Esos antiguos números son de antes de que Heather hiciera el HTML por mí, y separase cada mensaje/thread en páginas HTML separadas como debería haber hecho todo solo).
El trucos del 'strace' es sorprendentemente útil. En Linuxcare lo usamos siempre, y suele ayudarnos a encontrar ficheros de configuración ausentes, directorios donde deberían ir ficheros, ficheros donde deberían ir directorios, permisos erróneos, y todo tipo de cosas. Hay otra herramienta llamada 'ltrace' que proporciona un nivel de información similar, aunque ligeramente superior.
Usando 'tcpdump' y 'strace' puedes resolver casi cualquier problema en Linux. Son como máquinas de rayos X y escáners CAT/PET para la gente que da soporte técnico a Linux. Sin embargo, no las recomiendo a la ligera. Primero repasa la lista de males comunes que he listado anteriormente, considera usar ssh en vez de telnet, y entonces comprueba si necesitas "diagnóstico médico".

(?) Familiarizándose con un Sistema UNIX

De Patricia Lonergan el vie, 07 Abr 2000

Cómo averiguo lo siguiente en la versión de Unix que estoy usando: Tipo de OS y versión, nombre del nodo, dirección IP, tipo de CPU, velocidad de la CPU, cantidad de RAM, espacio en el disco duro, número de usuarios que tienen ids, número de hosts conocidos. Gracias Hombre de las Respuestas

(!) El comando:
     uname -a
Debería darte el nombre UNIX (Linux, SunOS, HP-UX, etc) y la versión/release del núcleo (kernel), arquitectura, y alguna otra información. (Puede incluir la fecha y máquina de la compilación del núcleo).
El comando:
     ifconfig -a
... debería darte la dirección IP, de netmask y broadcast de cada interfaz en el sistema.
El comando:
     hostname
... debería darte el nombre del host DNS que este sistema "piensa" que tiene. Buscarlo vía DNS reverso usando un comando como:
     dig -x
... podría ser posible si tienes el paquete de las utilidades DNS instalado.
A partir de aquí la cosa se complica dependiendo del "sabor" de UNIX estés, y de cómo esté configurado. (De hecho hay casos excepcionales donde los anteriores comandos no funcionarán):
Restringiré el resto de respuestas al caso de Linux.
Puedes obtener el tipo y velocidad de la CPU utilizano el comando:
     cat /proc/cpuinfo
(asumiendo que tu núcleo esté compilado con el sistema de archivos /proc habilitado y que tengas /proc montado. Que es lo más común).
Linux proporciona el comando 'free' para informar del uso y disponibilidad de la RAM y el swap. Muchos sistemas UNIX tendrán el comando 'top' instalado. También puede proporcionar esa información (aunque por defecto es en modo interactivo --- y por lo tanto es menos útil en los scripts).
Cualquier sistema UNIX debería proporcionar los comandos 'mount' y 'df' para generar información sobre qué dispositivos de almacenamiento están instalados y en uso (montados) y sobre la cantidad de espacio libre en cada uno. Ten en cuenta que deberías comprobar no sólo los espacios libres (bloques de datos) sino también tus ínodos libres (gestión de datos) por lo que debes usar los siguientes comandos:
	df
	df -i
El comando 'mount' también mostrará los tipos de sistemas de archivo y cualquier opción (sólo lectura, síncrono, etc) que se apliquen a estos. Puede que tengas que usar el comando 'fdisk -l' para encontrar cualquier otro sistema de archivos no montado (que pueda no estar listado en tu fichero /etc/fstab) en Linux. Solaris tiene un comando similar llamado prvtoc (print volume table of contents -- imprimir el volumen de la tabla de contenidos).
Averiguar el número de cuentas de usuario es algo directo en un sistema que use los ficheros locales /etc/passwd y /etc/group (configuración por defecto). Simplemente haz lo siguiente:
      wc -l /etc/passwd
... para saber el número de usuarios locales. Ten en cuenta que muchas de estas cuentas son puramente cuentas de sistema, usadas para gestionar los permisos y propiedades en ficheros y directorios del sistema. Si lees un poco ese fichero debería ser obvio de que tipo es cada uno. En general las distribuciones de Linux comienzan a numerar a los usuarios "reales" (aquellos añadidos después de la instalación del sistema) a partir de 500 o 1000 por lo que todos los nombres con una UID por encima de esos numeros son "reales" (o fueron añadidos por el administrador del sistema).
Sin embargo, es posible (particularmente en sistemas UNIX instalados en redes corporativas) que tu(s) sistema(s) usen un sistema de cuentas en red como NIS o NIS+. Puedes hacerte una idea del número de usuarios en esa red usando el comando 'ypcat' de este modo:
       ypcat passwd | wc -l
La pregunta sobre "número de hosts conocidos" es en realidad un poco tonta. ¿"Conocidos" en que sentido? La mayoría de sistemas usan DNS para mapear los nombre de hosts con direcciones IP. De esta manera cualquier sistema conectado a Internet "conoce" millones de hosts. Es posible que un sysadmin provea a un sistema con una lista especial de hosts y direcciones IP usando el fichero /etc/hosts, pero esto es bastante extraño hoy en día. (Es muy probable que acabes con esos ficheros sin concordancia alguna con el DNS).
Supongo que deberías buscar comandos con las letras "stat" en su nombre. Lee las páginas man de 'vmstat', 'netstat' 'lpstat' etc. Muchas versiones de UNIX también incluyen el comando 'sar' aunque es algo poco común en Linux. 'rpcinfo' y 'route' son otros comandos útiles.
Este conjunto de preguntas tiene un cierto tono a "haz mis deberes". (particulamente porque es algo común de un dominio .edu). Ten en mente que simplemente he realizado una breve descripción de la información que está disponible a un sysadmin que necesita familiarizarse con una nueva máquina. Hay cientos de otras cosas que conocer de un sistema.
La mayoría de la información que te interesa está bajo /etc. En un sistema Linux hay también bastante bajo /proc (la mayoría de las versiones de UNIX que soportan /proc lo usan para proceso de bajo nivel, mientras que el núcleo de Linux lo usa como una abstracción de sus datos internos para su lectura desde el espacio de usuario).

(?) Conectando NT y OS/2

De Carlos Ferrer el jue, 13 abr 2000

¿Sabes cómo conectar una caja NT con una OS/2 usando null modem?

Gracias, Carlos Ferrer

(!) Si claro. Enchufas el un final del cable null modem al puerto serie de una de las cajas, y el otro al puerto serie de la otra caja. Entonces instalas unos programas en cada máquina, los configuras y los ejecutas.
Antes de que me preguntes:
¡NO! No se que software nativo deberías usar para NT o OS/2. Ese es tu problema. Yo respondo preguntas de Linux. Soy el Hombre de las respuestas de la Gazeta de Linux.
Por lo tanto, por qué no le preguntas al soporte técnico de IBM y/o Microsoft. Ellos te vendieron el software. Ellos deberían proporcionar el soporte. La comunidad de Linux nos da el software, por eso yo regalo mucho soporte.
Mientras tanto, podrías probar suerte con el antiguo MS-DOS Kermit. NT y OS/2 se supone que soportan la ejecución de programas DOS, y deberían dejarte configurar tu "caja" DOS (máquinas virtuales, o lo que sean) para tener acceso a sus respectivos puertos serie. También puedes conseguir Kermit '95 que debería funcionar en Win '9x, NT, y OS/2. Este es un paquete comercial. No es libre.
El C-Kermit para UNIX y Linux tampoco es libre; aunque puedes descargarlo libremente y compilarlo. Deberías leer su licencia para determinar si puedes usarlo libremente o si tienes que comprar el libro del C-Kermit. (Por supuesto puedes apoyar su proyecto comprando los libros decidas usarlo o no). También hay un G-Kermit que es GPL.
Puedes saber más sobre Kermit en:
Columbia University Kermit Project Home page
http://www.columbia.edu/kermit

(?) "Controlando Temporalmente un VT"

De James Knight el jue, 13 abr 2000

Si tengo un programa interactivo ejecutándose en un VT, digamos tty1, ¿puedo "controlar" temporalmente ese VT desde otro, digamos tty2, o mejor aún, a través de una conexión via telnet (pts/n)?

Por ejemplo, tengo naim ejecuntándose en el tty1, he logueado via telnet, y matado ese proceso, y lo he arrancado otra vez para que no interfieran entre sí. ¿puedo de fingir de algún modo que estoy en la consola, para que cuando termine la sesión, esté aún conectado a naim?

Gracias, Jay Knight

(!) La manera más fácil de hacer esto es ejecutar 'screen'
En vez de arrancar programas interactivos directamente desde tu shell de login VT, ejecuta 'screen' y arranca el programa dentro de screen. Ahora puedes "desvincular" (detach) la sesión screen entera (con hasta 10 programas interactivos ejecuntándose dentro de ella) y volverla a vincular desde cualquier otro tipo de terminal de login.
Yo lo hago rutinariamente. Lo estoy haciendo ahora. Ahora mismo estoy trabajando en un xterm de 99 caracteres de ancho y 35 líneas de alto. Antes me había conectado a mi sistema via ssh, y "volcado" mi sesión 'screen' a ese xterm (80 caracteres por 50 líneas) usando el siguiente comando:
	   'screen -r -d -e^]]'
... la opción -d le dice a mi nuevo comando 'screen' que busque otra sesión 'screen' y la desvincule desde donde quiera que esté, la opción -r es para volver a vincularla a mi terminal actual o pseudoterminal, y la opción -e me permite establecer caracteres alternativos de "escape" y "acotación" ("quote") (más sobre esto enseguida).
He descrito 'screen' en números anteriores de la GdL. Sin embargo, es algo difícil de encontrar. Por alguna razón las características deseadas son difíciles de describir y las ideas fundamentales para hablar de ello son demasiado generales. Por ejemplo, hasta ahora las ideas fundamentales que he usado són:
Tú: controlar temporalmente un VT Yo: vincular vover a vincular desvincular sesión screen volcar
... ¿lo ves?
De todas formas, aquí tienes una introducción MUY pequeña a 'screen':
Primero 'screen' simplemente inicia una shell extra. Por lo tanto, si simplemente escribes 'screen' (la mayoría de las distribuciones incluyen 'screen') eso es posiblemente todo lo que verás. (Puede que aparezca algún tipo de copyright u otra nota). Ahora puedes ejecutar programas de la manera habitual. La única gran diferencia es que hay una tecla ([Ctrl]-[A] por defecto) que no es capturada por 'screen'. Esa tecla "meta" es la palanca para activar todas las otras características de 'screen'. Aquí tienes unas cuantas (listadas bajo como [Meta]+(tecla)):
      [Meta] [a]     -- envia un [Meta] literal a la sesión actual
      [Meta] [c]     -- crea una sesión de shell adicional bajo 
		        esta 'screen'
      [Meta] [w]     -- muestra/lista las sesiones actuales (ventanas)
      [Meta] [A]     -- ('A' mayúscula) establece el título de esta
			sesión (ventana)
      [Meta] [Esc]   -- entrar en modo "barra de desplazamiento" y modo "copia" (copiar
			& pegar del teclado)
      [Meta] [Space] -- moverse hasta la siguiente sesión
      [Meta] [Meta]  -- cambiar a la sesión más reciente
      [Meta] []]     -- (corchete derecho) pegar copiar del búfer "cortar" 
      [Meta] [?]     -- Rápida página de ayuda sobre otras teclas
      [Meta] [d]     -- Desvincular
      [Meta] [S]     -- ('S' mayúscula) dividir el screen/display
			(como 'splitvt')
      [Meta] [Q]     -- ('Q' mayúscula) unificar el screen/display
      [Meta] (digit) -- cambiar directamente al número de sesión (dígito)
Hay muchos otros. 'screen' tiene muchas características. Es la "Herramienta Imprescindible" ("Power Tool")del terminal UNIX/Linux. También puedes compartir tu(s) sesión(es) con otro usuario (como con el viejo paquete 'kibitz'). Es muy útil para hacer tutoriales en línea y soporte técnico . Tienes un búfer con desplazamiento y un cortar y pegar manejados por el teclado (con teclas inspiradas en 'vi', incluso puedes buscar hacia atrás a través del texto actual y el búfer de desplazamiento hacia atrás).
La mayoría de URL que ves en el "Hombre de las respuestas" están copiadas de una sesión 'lynx' usando 'screen.'
Si te olvidas de desvincular, puedes usar la opción -d (mostrada anteriormente) para desvincular remotamente una sesión. Puedes usar otras opciones para seleccionar desde múltiples sesiones 'screen' que hallas desvinculado. Puedes también ejecutar comandos 'screen' para iniciar programas en su propia ventana screen.
Extrañamente he descubierto que ocasionalmente inicio o vuelvo a vincularme a una sesión 'screen' en un sistema remoto desde dentro de una sesión 'screen' local. Cuando hago esto uso la opción -e para darle a la otra (remota) sesión screen una tecla meta distinta. (Eso es lo que hice en el comando de ejemplo anterior, estableciendo con el '-e^]]' que la combinación [Ctrl][corchete derecho] fuera la tecla meta para esa sesión. Hice eso mientras estaba en el trabajo. Antes de que saliera de allí la desvinculé. Cuando llegué a casa la volví a vincular a este 'xterm' (donde estoy escribiendo ahora mismo). Al principio simplemente la volvía a vincular con '-r' --- pero entonces me dí cuenta de que estaba usando mi otra tecla meta. Por lo que la desvinculé otra vez y usé '-r^aa' para resetear esa a la configuración por defecto (a la que estoy más acostumbrado).
Gracias a haber a conocer este método a alguna gente de Linuxcare, he descubierto que muchos de ellos han llegado a ver sus "sesiones" de forma similar a la mía. Mantenemos nuestro estado durante semanas o meses desvinculando, terminando la sesión, yendo a cualquier otro sitio (las X, consola, desde el trabajo, desde casa, etc), y siempre volviendo a vincularnos a nuestras sesiones en curso. Es un modo totalmente distinto de usar tu máqina.
Por lo tanto, pruébalo. Mira a ver si esto soluciona la cuestión.

(?) Quedándose sin Pseudo-tty's

De FRM el vie, 14 Abr 2000

hola,

mis núcleo sunos 4.1.4 ya está configurado para dar los 256, numero máximo, de ptys (pseudo dispositivos), pero mis usuarios se quejan frecuentemente de que se agotan. Necesito añadir ficheros al directorio /dev o recompilar el núcleo otra vez... o????

cualquier ayuda será muy apreciada,

Randy A Compaq Computer Corp.

(!) ¿¿¿SunOS 4.1.4??? Hmm. Quzás necesites una actualización.
Si 256 es el máximo para SunOS entonces no se que debes hacer para salir de esa situación. En Linux el máximo está alrededor de 2048. Supongo que podrías intentar hacer un puñado de nodos de dispositivo adicionales y reescribir/compilar otro puñado de tus aplicaciones para abrir el nuevo grupo de nodos en vez de los antiguos.
Yo diría que SunOS 4.1.4 está un poco mayor. Quizás quieras considerar cambiar a OpenBSD, NetBSD, o Linux. (Nota: SunOS era una UNIX al estilo BSD, por lo que quizá estes más cómodo con él de lo que lo estarías con Linux. No se nada de compatibilidad entre binarios de tus programas actuales).
(Obviamente no se mucho de SunOS. Soy el Hobre de las Respuestas de la Gazeta de LINUX y mi experiencia con otros tipos de UNIX es muy limitada y pobre como para ayudarte más de lo que he hecho).

(?) XFree 4.0 y Errores ":0.0 rechazado por el servidor"

De Alain Toussaint el dom, 16 abr 2000

Hola hombre de las respuestas,

la semana pasada, instalé debian (una instalación realmente básica) en un disco de fábrica

limpio y luego compilé Xfree86 4.0 (no tenía las X anteriormente),compiló y funcionó bien y lo he estado usando diariamente con el comando startx pero el miércoles de esta semana,el disco duro de la máquina de mi madre murió por lo que me dispuse a crear una disco de arranque de linux que contuviera un servidor X para que ella pudiese loguear en mi sistema y continuar su trabajo,entonces intenté xdm esa noche (localmente en mi caja primero),xdm se cargó,tomo mi credencial pero no abrió una sesión ni como usuario (alain) ni como root,examiné el fichero .xession-errors pero no llegúe a ninguna conclusión, aquí tienes el contenido del fichero:

> /home/alain/.xinitrc: exec: xfwm: not found
> /home/alain/.xinitrc: xscreensaver: command not found
> Xlib: connection to ":0.0" refused by server
> Xlib: Client is not authorized to connect to Server
> xrdb: Can't open display ':0'
> Xlib: connection to ":0.0" refused by server
> Xlib: Client is not authorized to connect to Server
> xrdb: Can't open display ':0'
> Xlib: connection to ":0.0" refused by server
> Xlib: Client is not authorized to connect to Server
> xrdb: Can't open display ':0'

los 2 primeros errores no me preocupan demasiado (tengo instalado xfce y respecto a xscreensaver,no lo quiero,ya que instalaré kde pronto, no me urge arreglar el script de xfce),pero los errores Xlib me preocupan bastante,entonces descargué el paquete xdm de debian y lo descomprimí en un directorio temporal para comparar el contenido en ambos directorios /etc/X11/xdm (el mío y el de debian) pero no encontré la raiz del problema,¿¿me podrías ayudar ??

Muchas gracias Alain Toussaint

(!) Hmmm. Suena a un problema con tu fichero .Xauthority. Has dicho que antes usabas 'startx', y ahora estás intentando usar 'xdm'. ¿Qué sucede si vuelves atrás y intentas 'startx' de nuevo?
'xdm' sigue un método diferente para manejar los ficheros 'xauth' (usando los scrips 'GiveConsole' y 'TakeConsole'). Haz un listado 'ps' y mira si tienes un servidor X con argumentos parecidos a estos:
     X :0 -auth /var/xdm/Xauthority
Se supone que existe un script "GiveConsole" que hace algo como:
    xauth -f /var/xdm/Xauthority extract - :0  | xauth -f ~$USER/.Xauthority merge -
(Que extrae una MIT Magic Cookie u otro elemento (token) de acceso del fichero Xauthority del xdm y lo mezcla para obtener la "cookie jar" de tu usuario. Esto puede, en principio, posibilitar que múltiples cuentas en un host o a través de una red puedan acceder al mismo servidor de display).
De todas maneras, hay muchos otros tucos que puedes usar para solucionar problemas similares.
Algunas veces puede que arranque el servidor X directamente (saltándome 'xinit', 'startx', y 'xdm'); entonces cambie a una de mi consolas en modo texto (usualmente cuando hago esto pongo el viejo & al final de la línea de comandos del servidor X, si me olvido entonces hago el viejo [Ctrl]+[Z], tecla y comando 'bg'). Lo siguiente es 'export DISPLAY=:0' (o :1, o lo que sea), e iniciar un 'xterm &'
En ese punto vuelvo a la consola X virtual, y uso el 'xterm' resultante para trabajar de forma más flexible. Quizá necesite ejecutar mi propios comandos 'xrdb' para insertar mis propias entradas en la "X resources database - base de recursos X" (piensa en ello como si fuera tu "entorno" del servidor X --- un conjunto de pares nombre/patrón y valor que son usados por los programas clientes de X para determinar su apariencia por defecto, comportamiento, etc).
También puede que ejecute varios comandos 'xset' para añadir mi ruta de fuentes y jugar con otras características.
Hacer este tipo de desplazamiento lento, como si lo viéramos desde el "ojo de un gusano", a través del laberíntico proceso de inicialización de las X usualmente aislará cualquier problema que tengas. Es jugar con X lo suficiente para darte cuenta de que ir a través de todos estos pasos es muy difícil.
Presumo que ya sabes algo sobre ello (puesto que ya has obtenido tus propias fuentes de XFree 4.0 y las has compilado). Está claro que no eres un novato. De todas maneras, intenta buscar ficheros .Xauthority. Supuestamente si simplemente los borras abrirás el servidor X completamente. No se si eso es totalmente cierto en XFree 4.0 pero parecía funcionar en XFree 3.x la vez que lo intenté.
Buena suerte con tu nuevo servidor X. Yo aún no me lo he bajado para jugar con él. Quizá espere hasta que alguien postee algún binario Debian a "woody" (la rama experimental/desarrollo actual del proyecto Debian).

(!) FW: Linux

Respondido por Carl Davis el lun, 17 abr 2000

Gracias Jim, pero he resuelto el misterio................
El problema era que a lilo no le gustan múltiples lineas "append" en /etc/lilo.conf. Lo arreglé poniendo todo lo que quería añadir en una sola línea append, separado por comas y por cotatement2, statement3" Quizá quieras añadir este consejo a la lista de consejos por 2 centavos. "
Saludos
Carl Davis

(?) -----Mensaje Original----- De: Carl Davis Enviado: jueves, Abril 13, 2000 9:12 AM To: 'answerguy@ssc.com' Asunto: Linux

Hola Jim,

Mis felicitaciones por la gran columna. Tengo Linux (Mandrake 7) en un Celeron 466 con 128 Mb RAM. Mi problema es que no puedo convencer a Linux de que reconozca más de 64 Mb. He intentado añadir lo siguiente al lilo.conf: append="mem=128M", sin éxito. Todavía aparece con solo 64 Mb. Varios tipos de Windoze pueden ver los 128 Mb. ¿Alguna idea de lo que está pasando ?

Carl Davis


(?) Determinando el Tipo de Cada Sistema de Archivos

De Scott el lun, 17 abr 2000

Hola Hombre de las Respuestas,

La compañia para la que trabajo va a comenzar a desarrollar productos para Linux pronto. Parte de mi preparación para esto consiste en conocer los sistemas de archivos de Linux. Una de las cosas que no he podido encontrar es como averiguar qué sistema de archivos está usando cada sistema de archivos. ¿Existe alguna utilidad para la línea de comandos que muestre esto? ¿Cómo lo consigo programaticamente?

(!) Aquí tienes un sencillo shell script que mostrará la salida del comando 'mount' y aislará el nombre del dispositivo y el tipo para cada sistema de archivos montado:
    mount | {
	IFS="      (,)";
	while read dev x mpoint x type opts; do
	   echo $dev $type;
	done
	}
Fíjate que este es uno de mis habituales "grandes bucles de datos" --- rediriges la salida de algún comando a un bucle 'while read ...; do' y haces todo el trabajo en el subproceso. (Cuando doy clases de shell scripting uno de los primeros puntos que enfatizo sobre las tuberías (pipes) es que hay un subproceso implícito en un lado del operador de tu tubería, o en el otro).
También vemos que uso la variable "$x" para comerme campos extra (las palabras "on" y "type" de la salida del 'mount'). Finalmente, uso la variable de shell IFS (inter-field separator) shell-special para añadir caracteres "(,)" a la lista de separadores de campo. Esto significa que cada una de las opciones de mount --- sólo lectura vs lectura/escritura, nodev, nosuid, etc --- serán tratadas como valores separados. Entonces podría, dentro de mi bucle 'while', anidar un bucle 'for' para procesar cada opción en cada sistema de archivos.
Un uso creativo de IFS y estos bucles 'while read ...; do' pueden permitirnos hacer bastantes cosas en shell si usar 'awk' y/o 'sed' para hacer análisis sencillos. Un uso creativo del comando 'case' (que usa patrones globales para coincidir valores variables de shell) es también útil y puede remplazar muchas llamadas a 'grep'.
Para obtener información del sistema de archivos en un programa en C deberías utilizar las llamadas de sistema 'statfs()' o 'fstatfs()'. Lee las páginas man de 'statfs(2)' o 'fstatfs(2)' para obtener más detalles. Consigue los fuentes de util-linux y lee el código de los comandos 'mount' y 'umount' para ejemplos básicos del uso de estos y las llamadas de sistema relacionadas.

(?) ¿Cualquier ayuda será apreciada!

Scott C


(?) ¿Qué sistema de archivos?

De Andrew T. Scott el lun, 17 abr 2000

Jim Dennis escribió: .....

(?) y haces todo el trabajo en el subproceso. (Cuando doy clases de shell scripting ...

(!) ¿Dónde puedo asistir a estás clases?
-Andrew
[
Afortunadamente para Linuxcare, su departamento de enseñanza tiene un montón de gente en él (¡saludos a todos!) y puesto que han asignado a Jim la tarea Do Cool Stuff - Hacer las tareas Interesantes no da clases actualmente. Para ser justos, ellos son solo uno entre los muchos centros dedicados a la enseñanza de Linux; tienes un buen listado en http://www.lintraining.com que de redirecciona al directorio de Linsight por ubicación y noticias sobre el asunto.

-- Heather. ]


(?) Cuatro cuestiones

De vg24 el mar, 18 abr 2000

Hola Hombre de las Respuestas,

Tengo unas cuantas pequeñas preguntas sobre mi máquina Slackware Linux...

> (1) ¿Cómo hago que programas (como xmms) arranquen automaticamente cuando
> 	inicio FVWM95 con el comando 'startx'? Espero conseguir algo
> 	similar al menú "Inicio" de Win98.
(!) Normalmente el comando 'startx' es un shell script que busca un fichero ~/.Xclients. Ese fichero es normalmente otro shell script. Consta de varios comandos que son lanzados en segundo plano (usando el operador '&'), y un comando que es lanzado como exec (lanzado en primer plano, y usado para reemplazar el propio intérprete del shell script.
Ese comando el primer plano es normalmente es gestor de ventanas. En cualquier evento se convierte en el "gestor de la sesión" para el servidor X. Cuando el programa termina, el servidor X lo toma como una indicación de que debería ser cerrado.
Por lo tanto, la respuesta a tu pregunta es que añadas los comandos apropiados al script .Xclients de tu directorio personal.
Si ingresas via 'xdm' (un programa de login gráfico) entonces puede ser que tu sistema en cambio busque un script ~/.Xsession. Normalmente yo enlazo los dos nombres a un fichero. Sin embargo, puedes tener ciertamente configuraciones completamente diferentes basadas en la diferencia entre ingresar via 'xdm' o usar el comando 'startx'.
Por supuesto esto ya es cuestión de gustos y políticas locales. Como dije, 'startx' en sí es normalmente un shell script. En algunos sitios se usa 'xinit' en vez de 'startx' --- y en otros hay diferentes formas de lanzar el servidor X y formas completamente diferentes de lanzar los diversos clientes que se ejecutan bajo él y lo controlan.
Tú mencionaste fvwm95. Esta es una de las múltiples variantes del gestor de ventanas fvwm. Es un gestor de ventanas tradicional. Simplemente proporciona un conjunto de menús (pulsa en la "ventana principal" que otros sistemas de ventanas llaman "papel tapiz" con cada uno de los botones del ratón para verlos), y un conjunto de elementos para la ventana (barras de tamaño, esquinas, y barras de título y botones).
En estos últimos años la comunidad open source (código abierto) ha creado un entorno gráfico de usuario algo más elaborado y "moderno" del estilo de: KDE, GNOME, y GNUStep. Estos son conjuntos completos de programas que pueden ser combinados para proporcionar el tipo de aspecto, sensación y utilidades que la gente espera de MacOS, MSWindows, etc.
Si realmente quieres algo "Como el Menú de Inicio" en Win'9x entonces quizás quieras probar KDE o GNOME. Estos tienen "paneles" que proporcionan una analogía más cercana al entorno al que estás acostumbrado.
(Nota: También es posible hacer que el aspecto de cada uno de estos entornos sea completamente diferente al de MS Windows. Ambos soportan "temas" que son colecciones de propiedades, gráficos, texturas, iconos, e incluso sonidos, que personalizan la apariencia y operación de un GUI (Grafical User Interface -- Interfaz Gráfico de Usuario) Linux. Para más información y algunas bonitas capturas de las posibilidades, échale un vistazo a http://www.themes.org).
> (2) Recientemente actualizé mi núcleo y binarios del sistema de archivos del núcleo 2.034 
> 	al 2.2.13. Tengo instaladas las XFree86 3.3.5. También actualizé
> 	mi placa base de un Intel P75 a un AMD K6-450. Mantengo los mismos
> 	32 Megs de RAM (un SIMM). Sin embargo, ahora noto que Netscape (y
>         otros?) hacen trabajar mi disco duro más cuando intento abrir nuevos
>         navegadores. Tengo claro que tengo poca memoria, pero puesto que tengo
> 	poco dinero, preferiría no invertir en un DIMM. No tenía ningún espacio swap
> 	establecido, y tampoco ahora. En realidad actualizé de netscape 4.1 a 4.6.
> 	¿Podría ser este el problema?
Hmmm. Ciertamente es muy probable que Netscape 4.6 consuma más memoria que el 4.1. Sin embargo noto una inconsistencia aquí. Dices que no tenías ningún espacio swap. Si eso fuera verdad entonces tu escasez de menoria debería haber causado fallos al intentar lanzar programas --- más que el incremento de "rascado" de disco. Creo que lo más posible es que en realidad tengas algo de espacio swap. Puedes usar el siguiente comando para averiguar que particiones swap y ficheros están activos en tu sistema:
     cat /proc/swaps
... lo que debería proporcionarte una lista de cualquier espacio swap que esté en uso. Por supuesto el comando 'free' también resumirá el espacio swap disponible y usado. Sin embargo, el "pseudo-fichero" (nodo) /proc/swaps en realidad te dirá "dónde" está situado la swap.
Cómprate más memoria. No está tan cara y es la mejor actualización para mejorar el rendimiento que le puedes hacer a tu sistema.
> (3)     Estaba usando GNOME/enlightenment, pero el panel de
> 	GNOME nunca se iniciaba automáticamente. ¿Cómo puedo conseguir
> 	que el panel de GNOME panel se inicialice, junto con el gestor de archivos de GNOME, (para
> 	poder tener esos geniales iconos de escritorio)?
Hmmm. No soy una persona de GNOME o KDE. ¿Tienes el resto de GNOME instalado? enlightenment es un gestor de ventanas. Era el gestor de ventanas por defecto para GNOME --- pero son proyectos separados. Por lo tanto, ¿tienes GNOME instalado? ¿Inicias la 'gnome-session' (ejecutándola dede tu script .Xclients/.Xsession como se describió arriba)?
Prueba con eso. Creo que existen un par de gestores de ventanas que implementan las API e indicaciones de GNOME --- por lo que no estás obligado a usar enlightenment.
> (4)	Por último, quería recortar mis ficheros syslog y wtmp. ¿Hay
> 	alguna forma de hacer esto? ¿Puedo simplemente hacer un tail -30 de las 30 últimas líneas
> 	y ponerlas en un nuevo fichero? Creo que wtmp es binario, por lo tanto ¿alguna idea?
Es correcto. los ficheros wtmp y utmp son binarios. No pueden ser recortados con simples shell scripts y utilidades de texto. El fichero utmp no debería crecer (mucho), sin embargo el wtmp crecerá sin límite. Sin embargo, el método usual de operar con wmtp es simplemente renombrar el actual, hacer un 'touch' de uno nuevo y olvidarse de ello.
Eso es suficiente para wtmp.
Sin embargo, NO lo pruebes con el fichero /var/log/messages u otros ficheros syslog. Esos siguen igual. Si los renombras o los borras, continuan creciendo.
¡Si! Has leido bien, si borras un fichero mientras algún proceso lo tiene abierto, ¡entonces no has borrado nada! Esto se debe a que el comando 'rm' simplemente hace una llamada de sistema 'unlink()'. Cuando el último link a un fichero se borra, Y EL FICHERO NO ESTÁ ABIERTO, entonces el sistema de archivos realiza la tarea doméstica de marcar el/los ínodo(s) asociado(s) como disponible(s), y de añadir todos los bloques de asociados a la "lista libre" del sistema de archivos. Si el fichero está todavía abierto entonces esas tareas domésticas quedan aplazadas hasta que se cierre.
Por lo que el método usuar para cortar estos ficheros syslog (ya que syslog se ejecuta todo el tiempo, y mantiene sus ficheros abiertos en condiciones normales) es hacer 'cp /dev/null' o 'echo "" > ' para truncarlos. Otra práctica común es borrar los ficheros y usar el comando 'kill -HUP $(cat /var/run/syslog.pid)' para forzar al syslogd a releear su fichero de configuración, cerrar todos sus ficheros, y reabrirlos.
Sin embargo, nada de esto debería ser necesario. Cualquier otra distribución de propósito general tiene algún tipo de scripts de rotación de log que se ejecutan mediante 'cron.' Estoy bastante seguro de que Patrick (Volkerding, principal arquitecto de Slackware) no se olvidó de ello.
(Debería puntualizar que no he usado Slackware en varios años. Nada en contra de ella. Simplemente que tengo muy pocas máquinas y poquísimo tiempo).

(?) ¡Gracias por la ayuda que me puedas proporcionar! Vikas Gupta

(!) Bien, creo que esto debería ser un espaldarazo en la dirección correcta.

(?) G-Kermit: El Paquete de Transferencia Kermit GPL

De Deepu Chandy Thomas el mar, 18 abr 2000

Señor,

Quisiera usar el protocolo kermit con minicom. Uso rz sz para zmodem. ¿Dónde puedo encontrar los ficheros para kermit?

Saludos, Deepu

(!) Mira en http://www.columbia.edu/kermit para obtener información detallada sobre todos los paquetes oficiales de Kermit, y en: http://www.columbia.edu/kermit/gkermit.html para información específica sobre el paquete GPL kermit (que implementa el sistema de transferencia de ficheros sin la características de scripting, llamada y otras de C-Kermit).
(Nota: C-Kermit también puede ser usado como un cliente 'telnet' o 'rsh' con un lenguaje de scripting, y muchas otras útiles características. Es un paquete de comunicaciones completo. Versiones recientes incluso han añadido ¡soporte para Kerberos!)

(?) ./script: No existe el fichero o el directorio

De Alex Brak el vie, 14 abr 2000

Tengo un problema con mi máquina linux, y no puedo por mucho que lo intente averiguar lo que está mal. Aquí están los síntomas:

> server:~/scripts$ whoami
> alex
> server:~/scripts$ ls -al ./script
> - -rwxr-----   1 alex  home        43747 Apr 10 22:31 ./script*
> server:~/scripts$ ./script
> bash: ./script: No existe el fichero o el directorio

(nota: el '*' al final del listado de ficheros es meramente un símbolo especificando que es un fichero ejecutable. no es parte del nombre del fichero)

(!) Tecnicamente ese "indicador de tipo de fichero -- file type marker" es el resultado de usar la opción -F del 'ls'
La causa más probable de este problema es la línea #! (línea de identificación de shell -- shebang) que debería estar al principio de tu script. Si eso no es correcto entonces es común obtener este error, tu shell te está diciendo que no puede encontrar el intérprete de scripts.
Si './script' fuera un binario ejecutable entonces también te sugeriría que busques librerías compartidas ausentes. De hecho, es posible que tu línea de identificación de shell apunte a algún intérprete (/usr/local/ksh o algo) que está presente, y ejecutable, pero al que le falta alguna librería compartida. Incluso es posible que una librería compartida dependa de otra, y esa es la que falta.

(?) Como puedes ver a partir de lo anterior, soy el propietario del fichero en cuestión, y tengo permisos de ejecución sobre él. El fichero existe. Y sin embargo bash dice que que el fichero no está ahí. Lo he intentado con otras shells a parte de bash (todas las disponibles en mi sistema, incluidas csh, tcsh, ash, y zsh). Incluso he intentado ejecutar el comando como root, sin éxito.

Este mismo problema ha aparecido antes con otro script que escribí. Tampoco puede solucionar el problema entonces.

Comprueba tu línea de identificación de shell. Debería parecerse a algo como esto:
#!/bin/sh
Nota: NO hay ESPACIOS en esta línea. NO pongas un espacio entre el #! y el nombre del intérprete.

(?) También me gustaría hacer notar que este problema aparece intermitentemente: justo después de terminar ~/scripts/script creé otro script llamado "test", hice chmod u+x sobre él y se ejecutó correctamente. Todavía no puedo ejecutar ~scripts/script, aunque :( Por favor ten en cuenta que he intentado renombrar el fichero. También he intentado moverlo a otro lugar en el árbol de directorios. Y nada me ha servido.

(!) Un fichero de texto sin línea de identificación de shell, que está marcado como ejecutable será ejecutado mágicamente con un shell igual al que lo ha invocado.
Probablemente me equivoque en algunos detalles pero el subproceso funciona parecido a esto:
Tú ejecutas un comando. El shell intenta simplemente hacer un exec() (después de realizar el análisis necesario de la línea de comandos para expandir cualquier patrón "global" de fichero y reemplazar cualquier variable de shell, operadores de sustitución de comandos, expansión de parámetros, etc). Si esa ejecución falla el shell puede intentar llamarlo con $SHELL -c (o podría hacer algo un poco diferente: eso parece que depende del shell).
Fíjate que el comportamiento en el primer caso está bien definido. Linux tiene un módulo binfmt_script (usualmente compilado/enlazado estaticamente en tu núcleo) que maneja una línea de identificación de shell correctamente formateada.

(?) No he experimentado ningún otro problema con mi sistema del que tenga constancia. ¿Sabe alguine qué podría causar esto, o cómo solucionar el problema?

Utilizo linux 2.2.14 en mi Pentium 120, con una distribución Slackware. El fichero en cuestión está en la partición principal, en un sistema de archivos ext2, que el núcleo soporta. Si hay alguna otra información relevante a parte de la proporcionada, por favor no dudes en preguntarla.

(!) Si apareciese "operación no permitida" te sugeriría que comprobases las opciones del mount para ver si el sistema de archivos estubiera montado 'noexec' (lo que sería una mala idea para tu sistema de archivos principal). Si apareciese un mensaje como "no se puede ejecutar el binario" entonces pensaría que pudiera ser que tuvieses un antinguo binario a.out y un núcleo sin el soporte a.out binfmt.
Pero estoy bastante seguro de que tienes un problema con tu línea de identificación de shell.

(?) Gracias, Alex


(?) ./script: No such file or directory

De Alex Brak el dom, 16 abr 2000

Perfecto. Muchas gracias.
Alex
-----Mensaje Original----- De: Jim Dennis [mailto:jimd@starshine.org] Enviado: Sábado, 15 Abril 2000 9:07 AM Para: Alex Brak Cc: star@starshine.org; Linuxcare.com" >jdennis@Linuxcare.com; Linuxcare.com" >tdavey@Linuxcare.com; bneely@linuxcare.com; sg@linuxcare.com Asunto: Re: el shell no puede ver un fichero existente

Tengo un problema con mi máquina linux, y no puedo por mucho que lo intente averiguar lo que está mal. Aquí están los síntomas:

> server:~/scripts$ whoami
> alex
> server:~/scripts$ ls -al ./script
> - -rwxr-----   1 alex  home        43747 Apr 10 22:31 ./script*
> server:~/scripts$ ./script
> bash: ./script: No existe el fichero o el directorio

(nota: el '*' al final del listado de ficheros es meramente un símbolo especificando que es un fichero ejecutable. no es parte del nombre del fichero)

(!) Tecnicamente ese "indicador de tipo de fichero -- file type marker" es el resultado de usar la opción -F del 'ls'
La causa más probable de este problema es la línea #! (línea de identificación de shell) que debería estar al principio de tu script. Si eso no es correcto entonces es común obtener este error, tu shell te está diciendo que no puede encontrar el intérprete de scripts.
Si './script' fuera un binario ejecutable entonces también te sugeriría que busques librerías compartidas ausentes. De hecho, es posible que tu línea de identificación de shell apunte a algún intérprete (/usr/local/ksh o algo) que está presente, y ejecutable, pero al que le falta alguna librería compartida. Incluso es posible que una librería compartida dependa de otra, y esa es la que falta.

(?) Como puedes ver a partir de lo anterior, soy el propietario del fichero en cuestión, y tengo permisos de ejecución sobre él. El fichero existe. Y sin embargo bash dice que que el fichero no está ahí. Lo he intentado con otras shells a parte de bash (todas las disponibles en mi sistema, incluidas csh, tcsh, ash, y zsh). Incluso he intentado ejecutar el comando como root, sin éxito.

Este mismo problema ha aparecido antes con otro script que escribí. Tampoco puede solucionar el problema entonces.

Comprueba tu línea de identificación de shell. Debería parecerse a algo como esto:
#!/bin/sh
Nota: NO hay ESPACIOS en esta línea. NO pongas un espacio entre el #! y el nombre del intérprete.

(?) También me gustaría hacer notar que este problema aparece intermitentemente: justo después de terminar ~/scripts/script creé otro script llamado "test", hice chmod u+x sobre él y se ejecutó correctamente. Todavía no puedo ejecutar ~scripts/script, aunque :( Por favor ten en cuenta que he intentado renombrar el fichero. También he intentado moverlo a otro lugar en el árbol de directorios. Y nada me ha servido.

(!) Un fichero de texto sin línea de identificación de shell, que está marcado como ejecutable será ejecutado mágicamente con un shell igual al que lo ha invocado.
Probablemente me equivoque en algunos detalles pero el subproceso funciona parecido a esto:
Tú ejecutas un comando. El shell intenta simplemente hacer un exec() (después de realizar el análisis necesario de la línea de comandos para expandir cualquier patrón "global" de fichero y reemplazar cualquier variable de shell, operadores de sustitución de comandos, expansión de parámetros, etc). Si esa ejecución falla el shell puede intentar llamarlo con $SHELL -c (o podría hacer algo un poco diferente: eso parece que depende del shell).
Fíjate que el comportamiento en el primer caso está bien definido. Linux tiene un módulo binfmt_script (usualmente compilado/enlazado estaticamente en tu núcleo) que maneja una línea de identificación de shell correctamente formateada.

(?) No he experimentado ningún otro problema con mi sistema del que tenga constancia. ¿Sabe alguine qué podría causar esto, o cómo solucionar el problema?

Utilizo linux 2.2.14 en mi Pentium 120, con una distribución Slackware. El fichero en cuestión está en la partición principal, en un sistema de archivos ext2, que el núcleo soporta. Si hay alguna otra información relevante a parte de la proporcionada, por favor no dudes en preguntarla.

(!) Si apareciese "operación no permitida" te sugeriría que comprobases las opciones del mount para ver si el sistema de archivos estubiera montado 'noexec' (lo que sería una mala idea para tu sistema de archivos principal). Si apareciese un mensaje como "no se puede ejecutar el binario" entonces pensaría que pudiera ser que tuvieses un antinguo binario a.out y un núcleo sin el soporte a.out binfmt.
Pero estoy bastante seguro de que tienes un problema con tu línea de identificación de shell.

(?) Gracias, Alex


(?) hola

De Credit Future Commercial MACAU Company el mie, 5 abr 2000

Hola señor
Instalé red hat 6.1 en mi sistema pero no muestra más de =
256 colores aunque mi tarjeta vga es una vodoo de 16 MB por qué pasa esto podeis = ayudarme ???He intentado con startx -bpp16 pero la calidad de mis imágenes = "jpegs , bmp " todavía no es buena !!! & y muestran puntos algunas imágenes = en windows se ven bien .
graciasfaisal

(?) hola

De Heather el mie, 5 abr 2000

Hola señor

(!) Heather no es un nombre masculino en Estado Unidos. Asumiré que esto estaba dirigido a la columna del Hombre de las Respuestas, e intentaré responder.

(?) Instalé red hat 6.1 en mi sistema pero no muestra más de

256 colores aunque mi tarjeta vga es una vodoo de 16 MB por qué pasa esto podeis = ayudarme ???He intentado con startx -bpp16 pero la calidad de mis imágenes = "jpegs , bmp " todavía no es buena !!! & y muestran puntos algunas imágenes = en windows se ven bien . graciasfaisal

(!) No has especificado qué resolución en MSwin tiene la calidad que buscas. En X, debes ejecutar el servidor de vídeo correcto de acuerdo a tu tarjeta si quieres el mejor rendimiento, pero casi siempre puedes hacer que la pantalla funcione con un servidor menor.
El servidor VGA16 solo proporciona un servicio de 256 colores. Si estás atascado con esto, puede que estés usando este. O, tu fichero /etc/X11/XF86Config puede que indique este nivel por defecto - el comando para cambiar las opciones por defecto es startx -- -bpp 16
con el espacio. También, startx es un shell script, y lanza un servidor particular ... usualmente /usr/X11R6/bin/X que es un enlace al verdadero... y por lo tanto, puede que estés ejecutando un servidor que no querías.
Buena suerte con tus JPEG.

(!) hola otra vez

De fai, respondido por Heather Stern el vie, 7 abr 2000

Gracias por la ayuda funcionó al final !!!!

(!) Me alegro de oir que te funcionó. Siento no haberte podido contestar por email en un tiempo adecuado - fechas límites de publicación, ya sabes.

(?) ¿Puedes ayudarme un poco más mientras me dices que quiero iniciar este comando por defecto startx -- -bpp 32 cómo puedo hacer esto ????

gracias Faisal

(!) Una manera sería crear .xserverrc en tu directorio personal; tendrías que especificar tu servidor X, pero entonces podrías también pasarle parámetros:
/usr/X11R6/bin/XF86_SVGA -bpp 32
Asumiendo que ese es el servidor correcto en tu caso, por supuesto. Si con startx consigues sencillamente que "funcione correctamente" excepto por ese pequeño detalle de la profundidad del color, podrías crear un alias de bash o poner un script de una línea en tu path. Me gusta guardar esos scripts personales en ~/bin (es decir en un bin dentro de mi directorio personal). Llámalo con un nombre más corto como miX y ahórate también teclear.
[
Entonces, ¿donde estaba Jim esta vez? Bien, le gustó mi respuesta, y estaba ocupado con otras respuestas y trabajo por hacer.

-- Heather. ]


(!) Cerrando el Demonio Ping: Revisado

Respondido por Nadeem Hasan el lun, 03 abr 2000

Hola,

Esto es en referencia a la anterior cuestión el "El Hombre de las Respuestas" y su respuesta. El uso de ipchains/ipfwadm para conseguir esto es como matar moscas a cañonazos. Un método mejor es el de simplemente usar lo siguiente como root:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Esto debería hacer que el núcleo ignore todas las peticiones de ping ICMP.

Ánimo, -- Nadeem

(!) Justo cuando crees que los sabes todo.

(?) Peticiones Revisionistas

From Nadeem Hasan on Tue, 11 Apr 2000

Hola,

La Gazeta todavía tiene la vieja descripción sobre desabilitar las respuestas de ping echo. ¿Significa eso que es mejor que lo que yo sugerí?

Nadeem :)

(!) No tengo el poder de cambiar lo que he publicado en meses anteriores. Tu (mejor) sugerencia sobre cómo deshabilitar las respuestas ICMP echo del núcleo de Linux (a las peticiones 'ping') debería aparecer en el número del próximo mes.
A ver, ¿cuál era ese nodo mágico de /proc?
Ahh, aquí está:
	 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
... nunca me acordaría de eso, pero el nodo está allí y reconocería el significado por el nombre. (Por lo que está en mi vocabulario pasivo más que en el activo).
Hay algunos otros nodos interesantes allí --- y creo que el que se refiere a "icmp_echo_ignore_broadcasts" parece útil.
Estaría bien que alguien quisiera escribir un COMO (HOWTO) sobre "Útiles Consejos y Trucos sobre /proc" (ideas, ideas). He hecho un cierto ajuste de rendimiento afinando y jugando con algunas de las entradas dentro de /proc/sys/vm (el sysctl de la memoria virtual), y conozco a otros que lo han hecho mejor que yo (de vuelta en Linuxcare, tuve que llamar a uno de nuestros expertos reales para que me echase una mano).
Supongo que los consejos se clasificarían en dos o tres categorías generales: robustez, seguridad, y rendimiento. Por ejemplo el /proc/sys/kernel/cap-bound (conjunto de capacidades de bounding) puede modificarse para hacer seguras algunos servicios incluso de un proceso 'root' subvertido (como las características del nivel de seguridad de BSD), y supongo que /proc/sys/vm/overcommit_memory podría permitir prevenir al sistema de un "overcommit" (proporcionando una operación más robusta a expensas de reducir nuestra capacidad de ejecutar múltiples "devoradores de memoria" concurrentes que piden más core del que en realidad necesitan).
Un buen COMO (HOWTO) estaría organizado por objetivo/situación (Inclementando el rendimiento del sistema de archivos, Limitando el daño de procesos subvertidos y malévolos (Crackers), etc) y incluiría notas sobre los pros y contras que cada opción supone. Por ejemplo uno puede deshabilitar las respuestas ICMP (¿por seguridad?) pero uno debería ser consciente de que cualquiera que tenga una razón legítima para acceder a CUALQUIER otro servicio en tu sistema podría querer hacerle 'ping' primero para asegurarse de que se puede alcanzar antes de que ellos (o sus programas) intenten acceder a cualquier otro servicio en ella. (En otras palabras no tiene sentido deshabilitar las respuestas ICMP en un servidor web, de correo, DNS, FTP u otro servicio público).
Desafortunadamente no tengo ni el tiempo, ni casi la suficiente experiencia para escribir esto. Ya hay algunas notas en los árboles de código del núcleo de Linux en /usr/src/linux/Documentation/sysctl/ y recuerdo que alguien está trabajando en una herramienta para automatizar alguna de estos PowerTweak/Linux (http://linux.powertweak.com/news.html) me viene a la mente.
De todos modos, ya he dicho suficiente.

(?) Ejecución Remota de Aplicaciones Gráficas

De Apichai T. el lun, 03 abr 2000

Estimado señor,

Puedo pedirle su consejo , sobre los pasos para configurar una caja linux para que sea posible ejecutar aplicaciones gráficas remotamente.

Gracias y saludos, Jing

(!) Aquí tienes un par de enlaces a COMOS (HOWTO) y mini-COMOS (mini-HOWTO):
Remote X Apps mini-HOWTO
http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html
(He copiado a su autor, Vincent Zweije, en esta respuesta).
No recomiendo usar su shell script de ejemplo de la sección 6.2:
!/bin/sh
cookie=`mcookie`
xauth add :0 . $cookie
xauth add "$HOST:0" . $cookie
exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"
El problema aquí está en que esa variable cookie está expuesta en estas líneas de comando (lo que es legible por todos via /proc y el comando 'ps'). También puede estar expuesta si es exportada al entorno. El manejo seguro debe realizarse a través de tuberías o ficheros (o descriptores de ficheros). Hay que tener en cuenta que la ventana de exposición es pequeña --- pero innecesaria. Lee la página man del 'xauth' para más detalles.
Mejor aún: ¡Usa ssh! (Lee el COMO de Vincent para profundizar en ello).
También me he dado cuenta que Vincent no distingue entre el gestor de sesión y el gestor de ventana. En la práctica son casi siempre el mismo programa. Sin embargo aquí está la diferencia:
El gestor de sesión es el programa que se inicia en segundo plano durante el proceso startx o xinit. El servidor X realiza un seguimiento de la ID de este proceso. Cuando esta muere, el servidor X lo interpreta como una señal de terminación. Cualquier programa (un 'xterm', una copia de 'xclock' o lo que sea) puede ser el gestor de sesión.
El gestor de ventanas es el programa que recibe los eventos de la "ventana principal --root window" (el término del X Windows System para lo que otros sistemas de ventanas llaman "papel tapiz -- wall paper" o "escritorio" o "telón de fondo -- backdrop"). También hay algunas otras cosas que el gestor de ventanas hace. Solo puedes ejecutar un único gestor de ventanas en cualquier servidor X en un instante determinado. Los gestores de ventanas (¿pueden?) implementan varias API que son exclusivas de ellos --- por lo que puedes simplemente usar "cualquier" programa X como tu gestor de ventanas.
Es una distinción sutil ya que casi todo el mundo usa su gestor de ventanas como su gestor de sesión.
Nota: Si tienes problemas con las conexiones X ten en cuenta que el cliente debe ser capaz de conectarse al servidor a través del socket apropiado. Por ejemplo, para conectar al servidor en :0 (localhost/unix:0) el programa debe ser capaz de acceder al socket de domino UNIX (usualmente es sockets que se encuentran en /tmp/.X11-unix/). Obviamente la restricción chroot() podría interferir con esa (aunque localhost:0, que es el mismo que localhost/tcp:0 debería funcionar todavía).
Un problema sutil y raro podría ocurrir si alguien estubiera intentando ejecutar las X después de compilar un núcleo sin soporte para sockets de dominio UNIX. Es posible compilar un núcleo de Linux con soporte total para TCP/IP y sin embargo dejar fuera el soporte para sockets de dominio UNIX.
Obviamente cuando se buscasen sockets de dominio de Internet (TCP/IP) de cualquiera de las tareas habituales de routing, direccionamiento, y filtrado pueden interferir con los intentos de tus clientes para conectar al puerto 6000 (o 6001, 6002, etc) el el servidor X anfitrión.
Para saber un poco más sobre acceso remoto al servidor X mira en VNC (Virtual Network Computing de los laboratorios AT&T de Cambridge: http://www.uk.research.att.com/vnc) (VNC fue en su origen desarrollado en el Laboratorio de Investigación de Olivetti Research Laboratory, que fue adquirido más tarde por AT&T).
No lo necesitas para ejecutar simplemente clientes X en tu servidor X. Sin embargo, es útil aprender sobre VNC en caso de que necesites alguna de las características especiales que proporciona.
Otro buen sitio para encontrar enlaces a mucha información sobre X es la página "X Sites -- Sitios X" de Kenton Lee (http://www.rahul.net/kenton/xsites.html) ¡Hay unos 700 enlaces allí!
Ten en cuenta que aunque X es actualmente el sistema de ventanas dominante para Linux existen otros esfuerzos que incluyen "Berlin" (http://www.berlin-consortium.org) y el "Sistema de ventanas Y -- Y Window System" (http://www.hungry.com/products/Ywindows). No se como marchan estos proyectos. He visto que las páginas web de Berlin han sido actualizadas recientemente mientras que el las páinas del Sistemas de Ventanas Y parece estar parado desde Marzo de 1998.
De todas maneras, buena suerte.


Copyright © 2000, James T. Dennis
Publicado en Linux Gazette Número 53 Mayo 2000
Transformación HTML por Heather Stern de Tuxtops, Inc., http://www.tuxtops.com/