¿PORQUE TRABAJAR EN LINUX ?

Linux es generalmente mas barato que los otros sistemas operativos
(o al menos no mas caro) y con frecuencia es menos problematico que algunos sistemas comerciales.
Puede que no sea el mejor sistema para sus aplicaciones en particular, pero para alguien que esta
interesado en utilizar las aplicaciones Unix disponibles para Linux, se trata de un sistema de alta
"performance".

linux vs windows


razones por las que linux es mejor

La instalación:
  • En Linux a pesar de todos los esfuerzos la instalación no resulta sencilla siempre, pero te permite personalizar totalmente los paquetes que quieras instalar.
  • En Windows la instalación es mínimamente configurarle aunque es muy sencilla.

La compatibilidad: Ninguno de los dos sistemas operativos son totalmente compatibles con el Hardware, a pesar de que Windows se acerca más, los dos están cerca de conseguirlo.
  • Aunque Linux no esta detrás de ninguna casa comercial gracias a su elevada popularidad ofrece una alta compatibilidad ofreciendo, además, actualizaciones frecuentes.
  • Windows al ser parte de Microsoft intenta ofrecer una gran cantidad de drivers ya que su gran poder económico hace que las empresas mismas de hardware creen sus propios drivers.

Software:
  • Linux al tener menos software en algunos campos sufre una menor aceptación por parte de las empresas, aunque gracias a los apoyos de empresas como Sun Microsystems o IBM se ha logrado muchos avances.
  • Windows al ser el más fácil de usar en las empresas, posee una gran cantidad de software.

Robustez:
  • Linux se ha caracterizado siempre por la robustez de su sistema ya que pueden pasar meses e incluso años sin la necesidad de apagar o reiniciar el equipo, también si una aplicación falla simplemente no bloquea totalmente al equipo.
  • En Windows siempre hay que reiniciar cuando se cambia la configuración del sistema, se bloquea fácilmente cuando ejecuta operaciones aparentemente simples por lo que hay que reiniciar el equipo.
Razones para cambiar:
  • Es software libre, lo que quiere decir que no hay que pagar nada por el sistema en sí.
  • Es un sistema operativo muy fiable ya que hereda la robustez de UNIX.
  • Ideal para las redes ya que fue diseñado en Internet y para Internet
  • No es cierto que tenga pocos programas, solo en algún campo muy especifico.
  • Es 100% configurarle.
  • Es el sistema más seguro, ya que al disponer del código fuente cualquiera puede darse cuanta de algún fallo, se puede decir que decenas de miles de personas velan por tu seguridad.
  • Existe muchísima documentación, también en español gracias a los proyectos como LUCAS.
  • Cuenta con el soporte de muchas grandes empresas como IBM, Corel, Lotus, Siemens, Motorola, Sun, etc.
  • Puedes encontrar ayuda en millones de sitios en Internet como los foros.
  • Es muy portable, si tienes un Mac un Alpha o un Sparc puedes usar Linux sin problemas.
"http://www.rinconsolidario.org/linux/win-Lin/win-Lin.html"

ERRORES, EQUIVOCACIONES, BUGS, Y OTRAS MOLESTIAS


Unix nunca fue diseñado para evitar que la gente hiciera cosas estupidas, porque esa
politica les habria evitado tambien hacer cosas inteligentes.
Doug Gwyn
Evitando errores

Muchos usuarios hablan de su frustracion con el sistema operativo Unix en alguna ocasion, a menudo
a causa de lo que ellos mismos han hecho. Una caracteristica del sistema operativo Unix que
muchos usuarios adoran cuando estan trabajando bien, y odian despues de una sesion hasta bien
avanzada la noche, es que muy pocas ordenes piden con rmacion. Cuando un usuario esta despierto
y funcionando, raramente piensa sobre ello, y esto es una ventaja, ya que le permite trabajar mas
e cientemente.
De todos modos, hay algunas desventajas. rm y mv no piden nunca con rmacion, y esto conduce
frecuentemente a problemas. Por eso, veamos una peque~na lista que puede ayudarle a evitar el
desastre total:
sobreescribiran sus cheros cuando
no este prestando atencion. Incluso el mas inofensivo de los comandos puede convertirse en
siniestro:
/home/larry/report$ cp report-1992 report-1993 backups
puede convertirse facilmente en desastre:
/home/larry/report$ cp report-1992 report-1993
El autor tambien recomienda, a partir de su propia experiencia personal, no hacer limpieza
de cheros a altas horas de la madrugada. >Que su estructura de directorios parece un poco
desordenada a la 1:32am? Dejelo estar |un poco de desorden nunca ha da~nado un ordenador.
Sigale la pista a su directorio actual. A veces, el prompt que esta usando no muestra en
que directorio esta usted trabajando, y el peligro acecha. pwd
/etc
mousehouse> ls /tmp
passwd
mousehouse> rm passwd
La anterior serie de comandos podria hacer muy infeliz al usuario, al ver como eliminaron el
fichero de contraseñas de su sistema. que es un error? Un ejemplo de error es si le pide al ordenador que calcule \5+3"
y contesta \7". Aunque este es un ejemplo trivial de que puede ir mal, la mayoria de los errores
en programas de computadoras se relacionan con la aritmetica en alguna forma extremadamente
extraña.

Cuando hay un error

Si la computadora da una respuesta erronea (compruebe que la respuesta es erronea!) o se bloquea,
eso es un error. Si cualquier programa se bloquea o da un mensaje de error del sistema operativo,
eso es un error.
Si un comando no naliza nunca su ejecucion, puede ser un error, pero debe asegurarse de que no
le ha pedido que este durante mucho tiempo haciendo lo que usted queria que hiciera. Pida ayuda
si no sabe lo que hacia el comando.
Algunos mensajes le alertaran de la existencia de errores. Algunos mensajes no son errores.
Por ejemplo, mensajes como \disk full" (disco lleno) o \lp0 on re" (lp0
ardiendo) no son problemas de software, sino algo incorrecto en su hardware|no hay su ciente
espacio libre en el disco, o la impresora esta mal.
Si no puede encontrar informacion sobre un programa, es un error en la documentacion, y deberia
ponerse en contacto con el autor de dicho programa y ofrecerse para escribirla usted mismo. Si algo
esta incorrecto en la documentacion existente, es un error en ese manual. Si algo aparece incompleto
o poco claro en el manual, eso es un error.
Si no puede vencer al gnuchess al ajedrez, es un fallo de diseño en el algoritmo de ajedrez que
usted usa, pero no necesariamente un error en su cerebro.

Cuando este seguro de haber encontrado un error, es importante asegurarse de que su informacion
llega al lugar adecuado. Intente encontrar que programa causa el error|si no puede encontrarlo, tal
vez pueda pedir ayuda en comp.os.linux.help o comp.unix.misc. Una vez encuentre el programa,
intente leer la pagina del manual para ver quien lo escribio.
El metodo preferido para enviar noti caciones de errores en el mundo Linux es via correo
electronico. Si no tiene acceso al correo electronico puede ponerse en contacto con la persona que le
suministro Linux eventualmente, encontrara alguien que o bien tiene correo electronico, o vende
Linux comercialmente y por tanto quiere eliminar el mayor numero de errores posibles. Recuerde,
en todo caso que nadie esta obligado a corregir ningun error a menos que tenga un contrato.
Cuando envie una noti cacion de error, incluya toda la informacion que se le ocurra. Esto incluye:
Una descripcion de lo que usted piensa que es incorrecto. Por ejemplo, \Obtengo 5 cuando
calculo 2+2" o \Dice segmentation violation -- core dumped". Es importante decir
exactamente que este sucediendo para que el responsable del mantenimiento pueda corregir su
error.
Incluya cualquier variable de entorno relevante.
La version de su nucleo (mire en el chero /proc/version) y sus bibliotecas de sistema (mire
en el directorio /lib|si no puede descifrarlo, envie un listado de /lib).

OPERADORES


Hay una cierta cantidad de operadores; aqui hay una lista, en orden de prioridad decreciente.
n( expr n)
Fuerza el orden de prioridad. Los parentesis deben, por supuesto, estar entre comillas, ya que
tambien son muy signi cativos para el interprete de comandos.
! expr
-not expr
Cambia el verdadero valor de la expresion, esto es, si expr es verdadera, se vuelve falsa. El signo
de exclamacion no tiene que ser precedido de escape, porque esta seguido por un espacio en
blanco.
expr1 expr2
expr1 -a expr2
expr1 -and expr2
Todas corresponden con la operacion logica AND. El caso mas comun es el primero, en el cual
esta implicita. expr2 no se evalua, si expr1 es falsa.
expr1 -o expr2
expr1 -or expr2
corresponden a la operacion logica OR. expr2 no es evaluada, si expr1 es verdadera.
expr1 , expr2
es la declaracion de lista; ambas expr1 y expr2 se evaluan (junto con todos los efectos secundarios,
por supuesto!), y el valor nal de la expresion es el de expr2 .

EJEMPLOS
Si, find tiene demasiadas opciones, lo se. Pero, hay un monton de casos preparados que valen la
pena recordar, porque son usados muy a menudo. Veamos algunos de ellos.
$ find . -name foo\* -print
encuentra todos los nombres de chero que empiezan con foo. Si la cadena de caracteres esta
incluida en el nombre, probablemente tiene mas sentido escribir algo como \"*foo*"", en vez de
\foo".
$ find /usr/include -xtype f -exec grep foobar \
/dev/null {} \;
Es un grep ejecutado recursivamente que empieza del directorio /usr/include. En este caso,
estamos interesados tanto en cheros regulares como en enlaces simbolicos que apuntan a cheros
regulares, por tanto el test \-xtype". Muchas veces es mas simple evitar especi carlo, especialmente
si estamos bastante seguros cuales cheros binarios no contienen la cadena de caracteres deseada.
(>Y por que el /dev/null en el comando? Es un truco para forzar al grep a escribir el chero del
nombre donde se ha encontrado un emparejamiento. El comando grep se aplica a cada chero con
una invocacion diferente, y, por tanto no cree que sea necesario mostrar a la salida el nombre del
chero. Pero ahora hay dos cheros, esto es: find es un comando que consume mucho tiempo, ya que tiene que acceder
a cada uno de los nodos-i del sistema para realizar su operacion. Por lo tanto, es sabio combinar
cuantas operaciones sean posibles en una unica invocacion de find, especialmente en las tareas de
`mantenimiento interno' que usualmente se administran mediante un trabajo de la tabla de tareas
plani cadas. Un ejemplo informativo es el siguiente: supongamos que queremos borrar los cheros
que acaban en .BAK y cambiar la proteccion de todos los directorios a 771 y todos los cheros
que acaban en .sh a 755. Y quizas temgamos montado el sistema de cheros NFS en un enlace
telefonico, y no querramos examinar los cheros ahi. (>Por que escribir tres comandos diferentes?
La manera mas efectiva para realizar la tarea es esta:
$ find . \( -fstype nfs -prune \) -o \
\( -type d -a -exec chmod 771 {} \; \) -o \
\( -name "*.BAK" -a -exec /bin/rm {} \; \) -o \
\( -name "*.sh" -a -exec chmod 755 {} \; \)
Parece feo (
subyacente es bastante sencilla. Recuerde: lo que se hace es una evaluacion verdadero/falso; el
comando introducido es solo un efecto secundario. Pero esto signi ca que se ejecuta solo si find
puede evaluar la parte ejecutable de la expresion, esto es solo si la parte izquierda de la subexpresion
se evalua como verdadera. Asi, si por ejemplo el chero considerado en el momento es un directorio
entonces el primer ejecutable se evalua y el permiso del nodo-i se cambia a 771; de otra manera
olvida todo y pasa a la siguiente subexpresion. Probablemente, es mas facil verlo en la practica que
escribirlo; pero despues de un momento, llegara a ser una cosa natural para Vd.

COMANDOS DIVERTIDOS


la mayoria de la gente que tiene que ver con los comandos de UNIX expuestos en este
capitulo no estarian de acuerdo con este titulo. \del Linux es muy estandar, y ahora tenemos un grupo de comandos, cada uno trabajando de una
manera completamente diferente. Nunca recordare todas esas opciones, >y dice que son divertidos?"
Si, Vd. ha visto un ejemplo del humor de los hackers1. Ademas, mirelo desde el lado positivo: no
hay comandos del MS-DOS equivalentes a estos. Si los necesita, tiene que adquirirlos por separado,
y nunca sabria como seria su interfaz. Aqui hay un util |y economico| valor a~nadido, <disfrutelo!!.
El conjunto de comandos explicados en este capitulo cubre find, que permite al usuario buscar
grupos de cheros especi cados dentro del arbol de directorios; tar, util para empaquetar algun
archivo para ser enviado o solo salvado; dd, el multicopista de bajo nivel; y sort, el cual . . . si, clasi ca
cheros. Una ultima condicion: estos comandos no estan bajo ningun concepto estandarizados, y si
bien podriamos encontrar un nucleo de opciones comunes en todos los sistemas IX, las versiones (de
GNU) que se explican mas abajo, y Vd. puede encontrar en su sistema Linux, usualmente poseen
muchas mas capacidades. Por tanto, si Vd. planea usar otros sistemas operativos UNIX, por favor,
no olvide comprobar la pagina del manual del sistema en cuestion para aprender las quizas no tan
pequeñas diferencias.

Entre los diversos comandos vistos hasta aqui, habia algunos que permitian al usuario bajar recursivamente
el arbol del directorio para llevar a cabo alguna accion: los ejemplos canonicos son \ls -R"
y \rm -R". Bien. find es el comando recursivo. Cada vez que piense \Bueno, tengo que hacer
tal cosa con todos esos cheros en mi propia particion", haria mejor en pensar en usar find. En cierto sentido el hecho que find encuentre cheros es solo un efecto secundario: su ocupacion real
es evaluar.
La estructura basica del comando es como sigue:
find ruta [. . . ] expresion [. . . ]
Esto es al menos en la version de GNU; otras versiones no permiten especi car mas que una ruta,
y ademas es muy infrecuente la necesidad de hacer tal cosa. La explicacion burda de la sintaxis del
comando es bastante simple: Vd. indica desde donde quiere empezar la busqueda (la parte de la
ruta; con el find de GNU puede omitir esto y sera tomado por defecto el directorio en uso .), y que
clase de busqueda quiere realizar (la parte de la expresion).
El comportamiento estandar del comando es un poco enga~noso, por lo que mas vale tenerlo en
cuenta. Supongamos que en su directorio principal de usuario existe un directorio llamado basura,
el cual contiene un chero foobar. Vd. felizmente escribe \find . -name foobar"(lo que como
puede adivinar busca cheros llamados foobar), y obtiene . . . nada mas que otra vez el prompt. El
problema reside en el hecho de que find es por defecto un comando silencioso; solo devuelve 0 si la
busqueda fue completada (con o sin haber encontrado algo) o un valor distinto de cero si hubiera
habido algun problema. Esto no ocurre con la version que Vd. puede encontrar en el Linux, pero
de todas maneras es util recordarlo.

OPCIONES
Aqui esta la lista de todas las opciones conocidas de la version GNU de find. Recuerde que siempre
devuelven verdadero.
-daystart mide el tiempo transcurrido no desde hace 24 horas si no desde la ultima medianoche.
Un autentico hacker probablemente no entendera la utilidad de tal opcion, pero un trabajador
que programa de ocho a cinco si lo apreciara.
-depth procesa el contenido de cada directorio antes que el directorio en si. A decir verdad, no
conozco muchos usos de esto, aparte de una emulacion del comando \rm -F" (por supuesto
Vd. no puede borrar un directorio antes de que todos sus cheros sean borrados tambien . . .
-follow respeta (es decir, sigue) los enlaces simbolicos. Implica la opcion \-noleaf"; ver abajo.
-noleaf desactiva una optimizacion que dice \Un directorio contiene dos subdirectorios menos que
su cuenta de enlaces rigidos". Si el mundo fuera perfecto, todos los directorios serian referenciados
por cada uno de sus subdirectorios (a causa de la opcion ..), como . dentro de si
mismo, y por su nombre \real" desde su directorio padre.
Esto signi ca que cada directorio debe ser referenciado al menos dos veces (una por si mismo,
otra por su directorio padre) y cualquier referencia adicional es por subdirectorios. En la
practica, sin embargo, los enlaces simbolicos y los sistemas de chero distribuidos3 pueden
alterar esto. Esta opcion hace que find funcione ligeramente mas despacio, pero debe dar los
resultados esperados.
-maxdepth niveles, -mindepth niveles, donde niveles es un entero no negativo. Indican respectivamente
que a lo sumo o que al menos niveles de directorios deberian explorarse. Un par de
ejemplos son obligados: \-maxdepth 0" indica que el comando deberia realizarse solo sobre
los argumentos de la linea de comandos, es decir, sin bajar recursivamente el arbol de directorios;
\-mindepth " inhibe el procesamiento del comando para los argumentos en la linea de
comandos, pero se consideran todos los otros cheros debajo.
-version imprime la version en uso del programa.
-xdev, el cual es un nombre engañoso, instruye a find para no cruzarse de dispositivo4, es decir,
no cambiarse de sistema de cheros. Es muy util cuando se tiene que buscar algo en el
sistema de cheros raiz; en muchas maquinas es una particion algo pequeña, pero, sino, \find /" buscaria en la estructura entera! Podemos asi evitar los sistemas de archivo que no
son promisorios.

HABLAR CON LOS DEMAS


Los modernos sistemas operativos tipo Unix son muy buenos a la hora de hablar con otras
maquinas y funcionar en red. Dos maquinas Unix diferentes pueden intercambiar informacion de
muchas, muchas maneras distintas. Y se puede sacar bastante provecho
de esta gran facilidad para la comunicacion.
Trataremos de cubrir el correo electronico, las noticias de Usenet, y diversas utilidades basicas
de comunicaciones de Unix.

Una de las facilidades mas populares que ofrece Unix de forma estandar es el correo electronico.
Con el evitamos el habitual follon de buscar un sobre, una hoja de papel, un lapiz, un sello, y un
servicio postal. A cambio debemos enfrentarnos al follon de pelear con el ordenador.

ENVIAR CORREO

Todo lo que hay que hacer es teclear \mail nombre" y escribir el mensaje.
Por ejemplo, supongamos que queremos enviar correo a un usuario que se llama sam:
/home/larry$ mail sam
Subject: Documentacion del usuario
Solo estoy probando el sistema de correo.
[Ctrl-d]
/home/larry$
/home/larry$
El programa mail es muy simple. Como cat, acepta texto de la entrada estandar, linea a linea,
hasta que recibe un caracter de n-de-texto como unico caracter en una linea: Ctrl-d . Asi, para
enviar nuestro mensaje, tuvimos que pulsar Intro y despues Ctrl-d .
Usar mail es la manera mas rapida de mandar correo, y es bastante util cuando se usa con redireccion de entrada y/o salida. Por ejemplo, si quisieramos enviar por correo electronico el chero report1
a \Sam", podramos escribir \mail sam < puede="" cambiar="" ni="" linea="" una="" vez="" ha="" pulsado="" intro="" asi="" que="" yo="" recomiendo="" mandar="" correo="" cuando="" no="" se="" use="" con="" el="" modo="" mail="" del="">

LEER MAIL


El programa \mail" ofrece una forma algo liosa de leer el correo. Si se teclea \mail" sin
parametros, aparecera lo siguiente:
/home/larry$ mail
No mail for larry
/home/larry$
\No mail for larry" signi ca: No hay correo para larry.
Me voy a enviar correo a mi mismo para poder utilizar el lector:
/home/larry$ mail larry
Subject: Sapos!
Y ranas!
EOT
/home/larry$ echo "culebras" mail larry
/home/larry$ mail
Mail version 5.5 6/1/90. Type ? for help.
"/usr/spool/mail/larry": 2 messages 2 new
>N 1 larry Tue Aug 30 18:11 10/211 "Sapos!"
N 2 larry Tue Aug 30 18:12 9/191
&

El simbolo peticion de ordenes del programa mail es un \et a la inglesa" (\&"). Acepta un par de
ordenes sencillas, y muestra una breve pantalla de ayuda si se pulsa \?" seguido de Intro .
Las ordenes basicas de mail son:

t lista-de-mensajes Mostrar los mensajes en la pantalla.
d lista-de-mensajes Borrar los mensajes.
s lista-de-mensajes chero Guardar los mensajes en chero.
r lista-de-mensajes Responder a los mensajes|esto es, comenzar a escribir un nuevo mensaje dirigido
a quien fuera que envio los mensajes referidos.
q Salir y guardar los mensajes que no hayan sido borrados en un fichero llamado
mbox en el directorio raiz del usuario.
>Que es una lista-de-mensajes? Consiste en una lista de numeros separados por espacios, o incluso
un rango de los mismos como \2-4" (lo que es equivalente a \2 3 4"). Asi mismo se puede introducir
el nombre del remitente, de este modo la orden t sam mostrara todos los mensajes provinientes de
Sam. Si se omite la lista-de-mensajes, se supone que la orden se re ere al ultimo mensaje mostrado.
Leer el correo con el programa mail presenta varios inconvenientes. El primero es que si un
mensaje es mas largo que la pantalla,
mensaje en un chero y usar more sobre el despues. El segundo es que no ofrece una buena interfaz
para manejar el correo antiguo |cuando se quiere guardar el correo para leerlo mas tarde.
Emacs tambien permite leer el correo con rmail, pero este libro no lo cubre. Adicionalmente
la mayoria de los sistemas Linux vienen con algunos lectores de correo adicionales ademas de mail,
como elm, o pine.


LINUX COMO SISTEMAS DE PROGRAMACION


La colección de utilidades para la programación de GNU es con diferencia la familia de compiladores más utilizada en este sistema operativo. Tiene capacidad para compilar C, C++, Java, Ada, entre otros muchos lenguajes. Además soporta diversas arquitecturas mediante la compilación cruzada, lo que hace que sea un entorno adecuado para desarrollos heterogéneos.

Hay variosentornos de desarrollo integrados disponibles para GNU/Linux incluyendo, anjuta,kDebelop Ultimate++, Code::Blocks, NetBeans IDE y Eclipse. También existen editores extensibles como Emacs o Vim. GNU/Linux también dispone de capacidades para lenguajes de guión (script), aparte de los clásicos lenguajes de programación de shell, o el de procesado de textos por patrones y expresiones regulares llamado awk, la mayoría de las distribuciones tienen instalado Python, Perl, PHP y ruby.