Trabajando con Cygwin
Cualquiera que se sienta confortable trabajando con una shell de Linux podrá comenzar a trabajar desde el primer momento con Cygwin sin absolutamente ninguna dificultad.
Sin embargo, el Cygwin tiene algunas peculiaridades debidas a su naturaleza Windowsera que conviene que conozcamos para poder sacar el máximo rendimiento de este excelente proyecto. Vamos a verlas:
- Formas de escribir los paths en Cygwin
- El sistema de paquetes
- La longitud de los argumentos en la línea de comandos
- Los ficheros de dispositivo
/dev
- La extensión
.exe
- El directorio
/proc
- Las utilidades
- Enlaces simbólicos
- ¿LF o CR/LF?
- Referencias imprescindibles
Formas de escribir los paths en Cygwin
El UNIX sólo usa la barra (/) para formar los paths. Windows, en cambio, usa la contrabarra (\) y letras de unidad. Cygwin, en su mundo mixto permite una gran variedad de formas para formar un path, siendo los siguientes ejemplos formas igualmente válidas de acceder a C:\Windows
desde Cygwin.
$ ls \c/window
$ ls c:/windows
$ ls c:\\windows
$ ls \c\\windows
$ ls /cygdrive/c/windows
Por cierto, Cygwin, como Windows, es case insensitive para los nombres de ficheros, pero el autocompletado de la línea de comandos no lo es por defecto, por lo que normalmente es mejor cambiarlo:
How can I get bash filename completion to be case insensitive?
Add the following to your ~/.bashrc file: shopt -s nocaseglob and add the following to your ~/.inputrc file: set completion-ignore-case on
El sistema de paquetes
Como ya vimos en la entrada Instalar un Cygwin portable en una memoria USB, el Cygwin se vale de una aplicación gráfica (el setup.exe
) para añadir, quitar y actualizar paquetes. Es en parte equivalente al dpkg de Debian o al rpm de Red Hat pero en formato gráfico. En realidad, por su naturaleza gráfica es más equivalente a utilidades como Kpackage, Synaptic, GNOME Debian Package Manager, YaST o Anaconda (en realidad estos dos últimos permiten la instalación completa del sistema en las distribuciones que lo incluyen, al fin y al cabo, igual que el setup.exe
).
En la línea de comandos tenemos el cygcheck, herramienta equivalente al dpkg o al rpm pero sólo para obtener listados de paquetes instalados (cygcheck -c -d
) y sus ficheros (cygcheck -l
), así como para verificar que los paquetes están correctamente instalados (cygcheck -c
). También podemos buscar a qué paquete pertenece un fichero dado (cygcheck -f
) e incluso buscar paquetes (cygcheck -p
). Finalmente, podemos hace un chequeo completo de la instalación (cygcheck -s -r
).
vnavarro@DARKSTAR ~ $ cygcheck -f /bin/bash bash-3.2.17-15 vnavarro@DARKSTAR ~ $ cygcheck -l less /usr/bin/less.exe /usr/bin/lessecho.exe /usr/bin/lesskey.exe /usr/share/man/man1/less.1.gz /usr/share/man/man1/lesskey.1.gz vnavarro@DARKSTAR ~ $ cygcheck -c | head Cygwin Package Information Package Version Status _update-info-dir 00531-1 OK alternatives 1.3.29a-1 OK apache2 2.2.4-1 OK ash 20040127-3 OK base-files 3.7-1 OK base-passwd 2.2-1 OK bash 3.2.17-15 OK bzip2 1.0.3-2 OK
Bajando a nivel de ficheros, la base de datos de paquetes instalados en el sistema la encontramos en el directorio /etc/setup
. Este directorio contiene un fichero .lst.gz
por cada paquete del sistema con la lista de ficheros que dicho paquete instala y un grupo de ficheros adicionales con datos de configuración de la última sesión del setup.exe
, configuración que se usará como punto de partida en la siguiente ejecución del setup.exe
. De estos ficheros, sin duda alguna, el más importante es el installed.db
, que contiene la lista de paquetes instalados, incluyendo información sobre la versión.
vnavarro@DARKSTAR /etc/setup $ ls |grep -v gz installed.db last-action last-cache last-connection last-mirror mirrors-lst timestamp
Tal y como veíamos en el artículo de portabilizar el Cygwin cuando eliminábamos las claves del registro y renombrábamos la instalación local de Cygwin, el setup.exe
usa la base de datos que paquetes que encuentra en el directorio señalado por el registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/
Y si dicha clave no existe, el instalador buscará alternativamente en:
C:\cygwin
Aunque no lo he comprobado, es muy posible que en sistemas en los que Windows no esté instalado en C:
, el directorio por defecto sea %HOMEDRIVE%\cygwin
.
El setup.exe
acepta parámetros de línea de comandos. Si ejecutamos setup -h
, en el directorio donde estemos se creará un fichero setup.log
mostrándonos las opciones disponibles para una instalación desatendida:
2007/07/17 19:45:50 Starting cygwin install, version 2.573.2.2 2007/07/17 19:45:50 Current Directory: C:\Temp\Cygwin 2007/07/17 19:45:50 Command Line Options: -D --download Download from internet -L --local-install Install from local directory -s --site Download site -R --root Root installation directory -q --quiet-mode Unattended setup mode -h --help print help -l --local-package-dir Local package directory -r --no-replaceonreboot Disable replacing in-use files on next reboot. -n --no-shortcuts Disable creation of desktop and start menu shortcuts -N --no-startmenu Disable creation of start menu shortcut -d --no-desktop Disable creation of desktop shortcut -A --disable-buggy-antivirus Disable known or suspected buggy anti virus software packages during execution. Ending cygwin install
Los paquetes que descarga el setup.exe
en el Local Package Directory son unos ficheros .tar.bz2
que contienen los ficheros del paquete junto con unos scrips opcionales para /etc/postinstall
y /etc/preremove
que se ejecutan en el momento que su nombre indica.
Además, como en las distribuciones de Linux, los paquetes también dejan su documentación en /usr/share/doc/paquete
, aunque los README
específicos de los paquetes para Cygwin están en /usr/share/doc/Cygwin/paquete.README
.
Para finalizar la sección, unos enlaces:
La longitud de los argumentos en la línea de comandos
Mientras que los sistemas UNIX son bastante generosos respecto a la longitud de los argumentos que podemos usar en una línea de comandos, longitud delimitada por el parámetro ARG_MAX (ARG_MAX, the maximum length of arguments for a new process), Windows, en cambio, es muy tacaño (Command prompt (Cmd. exe) command-line string limitation).
En concreto, en un Linux típico, disponemos de 128 KiB para almacenar todos los argumentos y el conjunto de las variables de entorno:
[root@unlinux root]# getconf ARG_MAX 131072
En el cmd
de Windows 2000, contamos con 2KiB-1Byte para almacenar los argumentos y la misma cantidad para cada variable de entorno. En Windows XP, la cantidad sube a 8KiB-1Byte.
Para poder evitar esa limitación en Cygwin, los desarrolladores han introducido una forma de introducir argumentos cuando queramos usar las utilidades de Cygwin sin estar dentro de bash, el @pathname, que consiste simplemente en meter los parámetros en un fichero y pasarle al comando únicamente el nombre del fichero precedido de @, con la peculiaridad de que los espacios extras desaparecerán a menos que estén entre comillas:
vnavarro@DARKSTAR ~ $ echo 'Una linea "bastante larga", no?' > parametros vnavarro@DARKSTAR ~ $ cat parametros Una linea "bastante larga", no? vnavarro@DARKSTAR ~ $ echo @parametros @parametros C:\cygwin\home\vnavarro>c:\cygwin\bin\echo.exe @parametros Una linea bastante larga, no?
Los ficheros de dispositivo /dev
El Cygwin emula los dicheros de dispositivo POSIX más comunes. No se puede listar el directorio /dev
y que aparezcan, pero todas las aplicaciones de Cygwin son capaces de utilizarlos:
vnavarro@DARKSTAR ~ $ ls /dev ls: cannot access /dev: No such file or directory vnavarro@DARKSTAR ~ $ ls /dev/null /dev/null vnavarro@DARKSTAR ~ $ echo 'Vete a null!' > /dev/null
Además de los ficheros de dispositivo típicos (tal vez los más famosos sean /dev/null
y /dev/zero
), el Cygwin proporciona algunos específicos para Windows, el más interesante de los cuales quizás sea el /dev/clipboard
que representa el texto almacenado en el portapapeles:
vnavarro@DARKSTAR ~ $ cat /dev/clipboard Texto copiado
Y además, tenemos ficheros de dispositivo adecuados para un acceso raw a discos y particiones:
/dev/scd0 \device\cdrom0 /dev/scd1 \device\cdrom1 ... /dev/sda \device\harddisk0\partition0 (primer disco completo) /dev/sda1 \device\harddisk0\partition1 (primera partición) ... /dev/sda15 \device\harddisk0\partition15 (segunda partición) /dev/sdb \device\harddisk1\partition0 /dev/sdb1 \device\harddisk1\partition1
Por tanto, podríamos, por ejemplo, extraer el MBR del disco fácilmente usando Cygwin:
vnavarro@DARKSTAR ~ $ dd if=/dev/sda of=mbr bs=446 count=1 1+0 records in 1+0 records out 446 bytes (446 B) copied, 0.276 s, 1.6 kB/s
La extensión .exe
Los ejecutables de Cygwin llevan la extensión .exe
, como todos los demás en Windows. Sin embargo, podemos trabajar con ellos sin especificar dicha extensión, lo cual puede suponer algún lío… Fijémonos en el siguiente ejemplo: Si copiamos un ejecutable sin especificar extensión, él aútomáticamente la pone:
vnavarro@DARKSTAR /tmp/prueba $ cp /usr/bin/ls a vnavarro@DARKSTAR /tmp/prueba $ ls a.exe
Para borrar, no podemos omitir la extensión:
vnavarro@DARKSTAR /tmp/prueba $ rm a rm: cannot remove `a': No such file or directory vnavarro@DARKSTAR /tmp/prueba $ rm a.exe
Si usamos en una parte extensión y en la otra no, la extensión no se añadirá:
vnavarro@DARKSTAR /tmp/prueba $ cp /usr/bin/ls.exe a vnavarro@DARKSTAR /tmp/prueba $ ls a
Y si tenemos el mismo fichero con extensión y sin extensión, pueden pasar cosas tan curiosas como esta:
vnavarro@DARKSTAR /tmp/prueba $ ls a a.exe b.exe vnavarro@DARKSTAR /tmp/prueba $ ls -i a a.exe 4785074604147613 a 1407374883619739 a.exe vnavarro@DARKSTAR /tmp/prueba $ ls -i b b.exe 281474976777118 b 281474976777118 b.exe
El directorio /proc
Como muchos UNIX, Cygwin tiene un sistema de ficheros /proc
con información variada del sistema. Un cat /proc/cpuinfo
nos devolvería la misma información que veríamos en Linux para el mismo comando, y en /proc/pid/
tenemos información sobre los diferentes procesos de Cygwin:
vnavarro@DARKSTAR /proc $ ls -F --color 2900/ 3456/ 5064/ 776/ cpuinfo meminfo registry/ stat version 3452/ 3476/ 5764/ 964/ loadavg partitions self@ uptime
Pero quizás lo más curioso del /proc
de Cygwin es que nos facilita enormemente el acceso al registro de Windows:
vnavarro.DARKSTAR /proc/registry $ ls /proc/registry/ HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_CURRENT_CONFIG HKEY_DYN_DATA HKEY_PERFORMANCE_DATA vnavarro.DARKSTAR /proc/registry $ ls "/proc/registry/HKEY_CURRENT_USER/Software/Cygnus\ Solutions/Cygwin/mounts\ v2/" / /usr/bin /usr/lib cygdrive flags cygdrive prefix vnavarro.DARKSTAR /proc/registry $ cat "/proc/registry/HKEY_CURRENT_USER/Software/Cygnus\ Solutions/Cygwin/mounts\ v2/cygdrive\ prefix" /cygdrive
Las utilidades
Las utilidades de Cygwin son: cygcheck, cygpath, dumper, getfacl, kill, mkgroup, mkpasswd, mount, passwd, ps, regtool, setfacl, ssp, strace, umount
Varias de ellas comparten el nombre con su equivalente de Linux: getfacl, mount, passwd, ps, kill, setfacl, strace, umount
. Por la propia naturaleza de Windows, estas utilidades han tenido que ser fuertemente adaptadas para este entorno tan diferente. Por ejemplo, los comandos de mount
y umount
no trabajan sobre dispositivos sino sobre directorios de Windows. ps
puede mostrar los procesos de Cygwin y los de Windows (con la opción -W
), pero kill
sólo puede enviar señales a los procesos de Cygwin.
Respecto a las otras utilidades:
cygcheck
Comentado anteriormente: Para gestionar los paquetes y el estado de la instalación.-
cygpath
Para convertir paths con formato Windows a paths con formato UNIX y viceversa. También nos proporciona los directorios importantes del sistema.vnavarro@DARKSTAR ~ $ cygpath -D /cygdrive/c/Documents and Settings/vnavarro/Desktop vnavarro@DARKSTAR ~ $ cygpath -u c:\\Windows /cygdrive/c/Windows vnavarro@DARKSTAR ~ $ cygpath -w /cygdrive/c c:\
mkgroup
ymkpasswd
Nos crean los ficheros/etc/passwd
y/etc/group
según la configuración de usuarios y grupos de Windows.
Todas ellas tienen página de man para consultar su uso.
Enlaces simbólicos
Cuando hacemos un enlace simbólico en Cygwin, en realidad se crea un acceso directo de Windows (un fichero .lnk
) que nos permite usar el enlace también en Windows.
La utilidad mkshortcut
nos permite generar accesos directos desde la línea de comandos del Cygwin.
En versiones anteriores a Cygwin 1.3.0 se usaba un fichero con una cabecera especial para indicar la existencia de un enlace simbólico: How do symbolic links work?. Aún podemos encontrar algunos ejemplos de tal cosa, por ejemplo, en el awk
/gawk
:
vnavarro@DARKSTAR /usr/bin $ ll awk lrwxrwxrwx 1 vnavarro Users 8 Oct 28 17:05 awk -> gawk.exe*
Si lo abrimos fuera del entorno de Cygwin, veremos dicha cabecera:
C:\cygwin\bin>type awk.exe !<symlink>gawk.exe
Por supuesto, si intentamos ejecutar tal cosa fuera de Cygwin, nos encontraremos con un error:
Si quisiéramos usar este ejecutable fuera de Cygwin, tendríamos que ejecutar en su lugar el gawk.exe
.
Por cierto, Cygwin también soporta hardlinks. Como NTFS soporta los hardlink de forma nativa:
C:\>fsutil hardlink create /? Usage : fsutil hardlink create <new filename> <existing filename> Eg : fsutil hardlink create c:\foo.txt c:\bar.txt
si trabajamos sobre NTFS, los hardlinks de Cygwin son nativos. En FAT, los hardlinks son simples copias que ocupan el mismo sitio que el fichero origen.
¿LF o CR/LF?
Durante la instalación, el setup.exe
nos pregunta si queremos trabajar como lo haríamos en cualquier UNIX (binary) o en modo DOS/Windows (text). En el primero de los casos, las líneas de los ficheros creados terminarán en LF y en el segundo de los casos, los ficheros se guardarán con finales de línea CR+LF y serían convertidos a sólo LF en cada lectura.
Esto está explicado en el manual de Cygwin: Text and Binary modes, pero puede resultar algo confuso.
Con el tipo de montaje estándar (binario), los ficheros escritos por utilidades de Cygwin tendrán sus líneas acabadas en LF:
vnavarro@DARKSTAR ~ $ mount C:\cygwin\bin on /usr/bin type system (binmode) C:\cygwin\lib on /usr/lib type system (binmode) C:\cygwin on / type system (binmode) c: on /cygdrive/c type user (binmode,noumount)
Sin embargo, si montamos un directorio con la opción -t
:
man mount
-b, --binary (default) text files are equivalent to binary files (newline = \n) -t, --text text files get \r\n line endings
vnavarro@DARKSTAR ~ $ mount -t c:\\temp /tmp/mnt vnavarro@DARKSTAR ~ $ mount C:\cygwin\bin on /usr/bin type system (binmode) C:\cygwin\lib on /usr/lib type system (binmode) C:\cygwin on / type system (binmode) c:\temp on /tmp/mnt type system (textmode) c: on /cygdrive/c type user (binmode,noumount) vnavarro@DARKSTAR ~ $ echo linea1 > /tmp/fichero_lf vnavarro@DARKSTAR ~ $ echo linea2 >> /tmp/fichero_lf vnavarro@DARKSTAR ~ $ cat -vet /tmp/fichero_lf linea1$ linea2$ vnavarro@DARKSTAR ~ $ cat -vet /cygdrive/c/cygwin/tmp/fichero_lf linea1$ linea2$ vnavarro@DARKSTAR ~ $ echo linea1 > /tmp/mnt/fichero_crlf vnavarro@DARKSTAR ~ $ echo linea2 >> /tmp/mnt/fichero_crlf vnavarro@DARKSTAR ~ $ cat -vet /tmp/mnt/fichero_crlf linea1$ linea2$ vnavarro@DARKSTAR ~ $ cat -vet /cygdrive/c/Temp/fichero_crlf linea1^M$ linea2^M$
Podemos ver que mientras que al acceder al fichero a través del directorio montado en modo texto vemos los finales LF, si accedemos por fuera vemos los finales CR+LF.
Qué interesante. Tengo cygwin en el ordena del curro porque alguna vez me ha venido muy bien y la verdad es que he aprendido muchas cosas que no conocía y con las que voy a sacarle más partido.
Gracias por el artículo.
Saludos, Iván.
Iván ¡Muchas gracias a ti por la visita!
Esta info me viene al pelo, gracias tron!!
Me aclaras muchas dudas.
Gracias por el artículo.
Saludos.
marleysoft y Cesar ¡De nada! ¡Gracias a vosotros por vuestra visita!
Gracias por la introduccion, te dejo una errata por si tienes a bien corregirla:
Cuando dices:
“Cygwin tiene un sistema de ficheros /proc con información variada del sistema. Un cat /dev/cpuinfo nos devolvería ”
creo que te refieres a /proc/cpuinfo y no a /dev/cpuinfo.
Lo dicho, gracias.
carakulo ¡Muchísimas gracias por tus comentarios y por informarme de la errata! ¡Ya está arreglada!
Hola Vicente,
Precisamente estaba intentando hacer un backup del MBR usando Cygwin, y me volvía loco porque no encontraba “/dev”. Gracias a tu artículo me he orientado. Pero, en vez de…
$ dd if=/dev/sda1 of=mbr bs=446 count=1
¿No debería ser…
$ dd if=/dev/sda of=mbr bs=446 count=1
Un saludo.
unratito ¡Tienes más razón que un santo! ¡Ya lo he arreglado! ¡Muchas gracias por avisar!
disculpa yo casi no se nada de cygwin pero tengo una duda y no se si puedas resolverla, pero quisiera saber si de casualidad no se puden instalar programas de linux en windows con este programa como por ejemplo el amarok o k-mess, es que pues me gustan mucho y pues no estaria de mas poder instalarlos en mi pc, ahy te dejo mi correo por si puedes constarme esta pregunta.
jacobo Cygwin no ejecuta directamente programas de Linux en Windows. Facilita muchísimo que los programas de Linux se puedan compilar en Windows con las herramientas de Cygwin, pero si nadie lo ha hecho, no estarán esos programas fácilmente disponibles. Puesto que ambos son preogramas para KDE, puedes intentar informate sobre si alguien lo ha hecho ya en la página del KDE para Cygwin.
Saludos, tengo el siguiente dilema, estoy recien comensando a utilizar cygwin. en estos momento ejecuto un bash awk que busca un archivo con datos y genera otros archivos fraccionados, como esta tarea se realiza repetidas veces con distintos archivos resulta tedioso editar el bash y agregar o liminar nombres de archivo, o alargar el vector con los datos, etc. mi idea es automatizar un poco esto pretendo crear un formulario en visual basic y deasde alli llamar al cigwin crear el bash awk y ejecutarlo, pero llego hasta ejecutar el cigwin y no le puedo enviar parametros para que este los ejecute, ya sea “bash bashquecortaarchivos.bat”. ¿existe alguna forma de enviar parametros al cigwin con otro bash que se ejecute desde visual?, o alguna otra forma de realizar lo que pretendo, habia pensado en llamar al bash.exe de la carpeta bin y a este enviarle los parametros, pero tampoco me resulto.
agradeceria mucho de sus consejos.
Nuelma Si yo me creo un script en
c:\script.sh
y ejecuto (desde el CMD normal de Windows) esto:me funciona sin problemas.
muchas gracias por responder, probe lo que indicas con el cmd pero no ejecuta el script en si, solo aparece el codigo con uin mensaje de abort.
este es el codigo que ocupo para seccionar los archivos
lo guardo como cortar.bat y lo ejecuto de la siguiente forma en el cygwin.
$ bash cortar.bat
mi idea era crear el archivo de la misma forma solo cambiar el vector desde vb, despues ejecutar el cygwin. si tienes alguna idea sera bienvenida, de todos modos muchas gracias
Nuelma He actualizado un poco la sección de enlaces simbólicos. Por favor, échale un vistazo. Como verás allí, en Cywin,
awk
es un enlace simbólico agawk
. Por ello no puedes usarlo fuera del entorno de Cygwin, pero sí que puedes usar elgawk
, que funciona sin problemas:Por otra parte, si decides poner lo mismo en un script para ejecutarlo fuera del entorno de Cygwin, tienes que acordarte de poner los PATH completos, porque el
bash
no habrá ejecutado el/etc/profile
ni el.bashrc
para poner las variables de entorno bien:Y finalmente, he descubierto que con este script:
devuelve un extraño error:
que es una deformación del error estándar para informar de que no se ha encontrado el fichero:
Sin embargo, esta otra versión en la que usamos un empipamiento y no especificamos el fichero:
sí funciona:
Debe de ser un bug, porque en otros UNIX, lo anterior sí funciona.
Yo creo que con todos estos temas te podrían estaban afectando. Tras considerarlos, deberías de poder ejecutar sin problemas tu script.
por fin lo logre haciendo algunos arreglos al archivo del scrip. llamo al gawk y usando “-f” indico el path del archivo que tiene el script(cut.txt), luego el path del archivo con los datos(archivodatos.txt), como sigue(tengo instalado el cygwin en el d:)
la diferencia con el primero es que quito las comillas simples y el awk inicial. ahora creo un bat y listo funciona. muchas gracias por el tiempo prestado, los concejos, articulos, …todo.
Nuelma Me alegro de que te haya funcionado
Buenas tardes
Estoy buscando comando basicos de cygwin bash-3.2 tengo Windows Vista??
Saludos
Constantino No entiendo en absoluto qué es lo que necesitas. Si lo que quieres es instalar Cygwin en Windows Vista, en principio no deberías de tener ningún problema.
Hola Vicente:
Realmente Cygwin es una aplicación espectacular.
Por circunstancias algo extrañas, estoy tratando de hacer funcionar un paquete open source que se llama iMOOSE, y cuya instalación es bastante larga. Desgraciadamente estoy topando con problemas en la compilación del mismo, y que no estoy pudiendo descifrar (la cosa de por sí es complicada ya que tengo casi los mismos problemas en Ubuntu)
Lo que quería preguntarte es si tienes algún ejemplo o referencia a un ejemplo para compilar una aplicación (compleja) en Cygwin? Con el fin de seguir los pasos en detalle y entender mejor el funcionamiento. (Este programa sigue el proceso clásico de *ix con ./configure y luego make all y luego make install.
Gracias por adelantado.
Juan Pablo
@Juan Pablo Me temo que no puedo darte consejos sobre lo que dices. Yo las pocas cosas que he intentado compilar en Cygwin, en su mayoría cosas sencillas, me han funcionado sin problemas.
Hola Vicente:
Muchas gracias, haré la prueba inicial con algunas cosas simples (si puedes pasarme referencia a ésas te agradeceré) y luego trataremos el más complejo que es este iMOOSE
Un abrazo,
Juan Pablo
Hola,
yo tengo CYGWIN desde hace un par de años instalado en el PC del trabajo.
Siempre que necesito analizar ficheros de log, parsear y demás acabo pasando del ‘shell de windows’ y lo empleo.
ahora estoy buscando a ver si tiene alguna utilidad para formatear …
Saludos
Xavier
@xavier ¿El comando
format
de Windows que se puede usar en Cygwin no te sirve?Hola!
Me parece una info muy interesante. Muchas gracias, me guardo la página y le echaré un vistazo.
JO
@JO ¡Gracias!
Super Coco
Recién me voy a iniciar con Cygwin y el material que pusiste me vendrá muy bien.
Ahora te hago una pregunta:
Resulta que tengo que desarrollar un programa en C (en modo consola estándar) para una empresa y yo uso en casa Windows XP. Quería saber si con Cygwin puedo tranquilamente desarrrollar esa aplicación en C, compilarlo en Cygwin, y que luego el mismo se ejecute sin problemas en cualquier otro Linux como ser Debian, Ubuntu, etc.
Saludos
@alien Sí, podrías usar Cygwin para hacer el desarrollo, pero el binario resultante no funcionaría en Linux directamente.
El código fuente te servirá sin cambios en Linux en la mayoría de casos pero en otros puede que no, ya que hay factores como las librerías disponibles o sus versiones que afectan. Por tanto, puede ser que puedas reutilizar el código fuente recompilándolo en Linux, pero no es seguro que funcione 100% sin problemas.
Gracias Super Coco. Yo pensaba que Cygwin me producía los binarios -y todo lo demás- del programa C para ser ejecutado en un Linux sin problemas.
Entonces tendría que utilizar un Linux Live-CD no?
Supongo que con él sí puedo hacer mi aplicación C (ya que tengo entendido que por ejemplo Ubuntu Live o Knnopix traen un compilador C incluido) y luego que la gente de la empresa lo ejecute con su Linux; eso es posible?
Lamentablemente por ahora no podré instalar Linux en mi PC porque en este momento estoy terminando con una aplicación hecha en C bajo Windows XP para otra gente.
Saludos
@alien Sí, con un Live-CD podrías desarrollar el programa, pero como cargan de la unidad óptica no van muy ligeros. La mejor opción sería instalar Linux en el disco duro. No hay ningún problema en, si tienes un poco de espacio en el disco duro, reparticionar y dejarle un poco de hueco junto a Windows. Por otra parte, asegúrate de tener más o menos la mismas versiones de librerías que tu cliente o tal vez el binario no funcione directamente.
Gracias amigo, seguiré tus consejos.
Un saludo
tengo un programa que tiene que ver con sockets, pero existe una libreria que no tiene y la quiero agregar, y no se como, alguien me puede ayudar, el programa en linux no me carca error, pero cuando lo correo me marca unos mensajes (agrego que la libreria que no puedo agregar, la agregue a una libreria, pero no se si es la correcta), pd. son nuevo usando el cygwin
@Eduardo Me temo que no te puedo ayudar con tu problema. Lo siento.
Hola!!!
Primera vez que me estoy interiorizando en LINUX, dado que me gustaria aprender a utilizar su ambiente, instale el Sygwin, pero ahora no se que hacer. Con suerte se algunos comandos que he leido por ahi, pero nada mas, aca hablan de todo y yo quedo marcando ocupado.
Quisiera me enviaras o dieras link, de que puedo hacer con esta herramienta, que muchos dicen que es muy buena, comandos y todo eso, me volveria loco buscando en internet informacion de este programa, pero si no entiendo para que es, es dificil, poder inteniorizarce mas en esto.
Otra cosa este programa tiene alguna interfaz grafica???
Cualquier ayuda me agradeceria me la inviaras o informaras mediante el correo o el foro.
De antemano muchas gracias.
PD. Como puedo conseguirme un cd de lunix para instalar, y puedo instalar LINUX si ya tengo windows xp instalado en mi PC??
Hola Muchachos:
tengo un gran problema con el Cygwin trabajo muchas ventanas al tiempo de esta interfaz tan buena pero me pierdo por el gran numero de ventanas ya q en cada una de ellas dejo un proceso distinto y lo unico q me aparece en la parte superior de la ventana es ” ~ ” quisiera saber si hay alguna forma de cambiar esto espero su respuesta y Gracias.
@Javier Igual el Terminator, descrito en la entrada “Terminales para Cygwin. Notas sobre Terminfo y Termcap.” te sirve para lo que comentas.
Hola,
Me he instalado el cygwin con windows vista y no me funciona bien. No me reconoce los comandos, ni siquiera startx, y no puedo trabajar. Si pongo ls, me sale bash.exe. Me dijeron que lo instalara con el modo de compatibilidad, y lo he hecho, pero sigue sin funcionar.
Intento desinstalarmelo, pero no me deja eliminarlo de c:/, me lo recicla. Tampoco aparece en la lista de programas en el panel de controol, ¿qué debo hacer para desinstalarlo y volverlo a instalar?
Gracias
@Beatriz No he usado nunca ni Vista ni Cygwin sobre Vista, de modo que no te puedo ayudar. Lo siento.
Hola. Gracias por toda la ayuda que dais.
Yo acabo de descubrir el Cygwin. Mi problema es que tengo un código en C desarrollado para Linux (con directorios de Linux, librerías, y que se ejecuta en shell) pero tengo que utilizarlo en windows para comparar resultados con software windows. Mi pregunta es si con Cygwin los datos creados por el código C puedo después utilizarlos con el software windows o si utilizarán tambien el sitema de archivos de Linux y no serán compatibles. Es decir, ¿me vale el cygwin para reutilizar el código que tengo en Linux o tengo que modificar el código C y compilarlo en Windows ya todo? Muchas gracias por adelantado.
@Gurru Dependiendo de qué hagas, podrías usar Cygwin para reutilizar el código de Linux pero en función de las librerías que haya o no haya disponibles en Cygwin, puedes encontrarte con que no sea posible.
Hola, acabo de instalar cygwin y no tnego muy claro como va. Tengo una aplicacion programada en c con sus cabeceras. La compilacion del programa se hace ocmo en linux, es decir, >gcc arxivo.c -o arxivo.exe? esque lo he compilado de esa forma y me ha dado mil errores…”error de decdificacion” no se si esque las cabeceras han de ir en alguna carpeta especifica. Gracias y slaudos
@Damon83 En principio se compila igual, sí. Pero ni la versión de gcc es la misma ni la de las librerías y ni siquiera las librerías instaladas son las mismas, así que puede haber muchas cosas que no permitan que el código fuente de Linux se compile en Cygwin sin problemas. Algunos casos necesitarán trabajo adicional para adaptar el código.
Hola,
Me gustaría saber si se puede instalar BlueZ con Cygwin. Lo intenté hacer pero me da un error:
Bluetooth library is required.
Pero no sé que librería quiere decir. Alguien sabe cómo se hace.
Muchas gracias.
@sofia Seguro que no. Ese tipo de librerías necesitan interfaces de bajo nivel que en Cygwin no existen.
disculpen la ignorancia pero como obtengo permisos de administrador al iniciar el cygwin y que me cambie $ por # ??? … gracias por adelantado …
@cheillo En Cygwin siempre trabajas con el mismo usuario que el que estás usando en Windows a menos que lo ejecutes como administrador.
Hola, soy nuevo en el manejo fuerte de cygwin( solo he hecho pruebas de comandos linux). Lo que necesito es saber como tomar las variables de entorno de windows para usarlas en un shell script que se ejecutara con cygwin(esto para pruebas bajo windows, luego se pasara a unix). Agradecido de ante mano.
@Jesus F. En Cygwin tienes todas las variables de entorno de Windows a tu disposición. Ejecuta
set
oenv
y lo verás.Buenos dias, gracias por la respuesta. Intente lo que me dices de la siguente manera:
- echo “Variables de entorno de Windows…”
- env $Path
pero no consigo que me muestre la cadena en la consola. Tambien intente con
- echo “Variables de entorno de Windows…”
- echo $Path
y nada. Si me pudieras mostrar un ejemplo sencillo de como hacerlo, te estaria muy agradecido. Saludoss!!!!…..
@Jesus F. No entiendo lo que quieres hacer con “
env $Path
“. Si quieres sacar el PATH, sólo tienes que ejecutar “echo $PATH
“. Si quieres sacar una variable en concreto, puedes hacer “env | grep VARIABLE
“.Gracias por tu respuesta me ayudo a entender mas el asunto de las variables de entrono, pero tengo otro problemita y es que cuando intento ejecutar un archivo .sh me lanza errores que en unix no aparecen. Te envio un ejemplo del codigo que uso y el error:
——-Codigo————
#!/bin/bash
cd /home/farma
——-Error————–
New User@pc003 /cygdrive/c
$ sh FarmaOracleSH.sh
: No such file or directoryd: /home/farma
FarmaOracleSH.sh: line 3: $’\r’: command not found
FarmaOracleSH.sh: line 4: $’\r’: command not found
El archivo FarmaOracleSH.sh esta en “/cygdrive/c” y la ruta a la que quiero cambiar es a “/home/farma”.
Que puede ser??? De verdad que no entiendo.
Gracias por tus respuestas!!!!….
@Jesus F. Fíjate en que se queja de que en las líneas 3 y 4 (que seguro que son líneas vacías) hay un r. Eso ocurre porque estás creando el script con un programa de Windows (p.e. el bloc de notas) por lo que las líneas tienen fin de línea de Windows y no de UNX. En la sección ¿LF o CR/LF? hablo un poco de ese tema.
Escribe el script con
vi
dentro de Cygwin o al menos conviértelo con el comandodos2unix
antes de ejecutarlo.Gracias!!!! Te debo una hermano!!! Yo estoy usando el Notepad++ y entre sus opciones esta la de crear los archivos con el formato de unix(aparte de que colorea las palabras reservadas de muchos lenguajes de programacion, es mas comodo y es GPL). Si tengo otra duda o consigo algo interesante lo publicare. Saludos!!!!!
@Jesus F. Me alegro de que te haya servido mi consejo. Yo también uso el Notepad++ en Windows
Buenas tardes. Tengo una inquietud(quizas sea pequeño y trivial pero tengo que resolverla
): Tengo este codigo
#!/bin/bash
cd /home/farma/prueba
for POLL in *.*
do
if [ ! -s $POLL ] # Remove empty files
then
rm $POLL
echo “Remove empty files”
fi
done
exit
y en la instrucion “if [ ! -s $POLL ] # Remove empty files” no se que significa el “-s”. Estuve buscando el la web y solo consigo ejemplos de otras opciones como -f, -d, -x, -r, etc.
Gracias por sus respuestas!!!!
@Jesus F. Si haces un “
man bash
” en Cygwin verás que:-s file
True if file exists and has a size greater than zero.
Gracias hermano. De verdad que si esta ayuda estaria todavia dadome cabezasos!!!!
Tengo windows vista e instale cygwin, pero no ejecuta correctamente, incluso ni ls
funciona.
Alguien sabe que puede pasar
Buenas Super_Coco. Muchas gracias por la info es super interesante. Yo estoy iniciandome en esto porque debo de administrar una aplicacion bajo Solaris y de momento para empezar a soltarme creo que me puede valer… pero… kitando ls crear y petar directorios y archivos… jejeje no se que mas puedo hacer?
Muchisimas gracias por currarte esto, nos ayuda a los que somos un poko tontines jajajjaa o que se tan iniciando!!
Saludos!!
Super Coco, estoy haciendo un experimento con una aplicacion que cuando instala, agrega servicios de windows… el tema es que cuando realize updates, algunos servicios me funcionan y otros no, pero el tema es el porque… yo instale todo dentro de la sesion Administrador de mi Wind 2003 Serv. y por lo que veo, es que cuando instalas algo haciendo doble click al setup.exe, te registra todos los archivos con el owner Administrador… pero cuando cargar variables de ambiente y demas desde linea de comando y haces las cosas desde linea de comando, me parece que hace sus operaciones con los archivos, pero sin owner… puede probable algo de lo que te estoy comentando?
Saludos, TongaX
@TongaX Me temo que no consigo seguirte. ¿Qué relación tiene lo que comentas con el Cygwin?
Hola a todos.
Esta forma de instalar CygWin, me parece muy util.
Por otro lado requiero de ayuda, espero me puedan ayudar. El problema que tengo es el siguiente:
Cuando me inicie con CygWin, hace un par de años, lo instale en mi maquina que tenia windows Milenio y trabaje por mucho tiempo así sin ningun problema.
Después cambie el sistema a windows XP y al tratar de instalar el CygWin el programade setup.exe, siempre manda un mensaje que windows tiene algun problema con el “bash.exe”. Debido a esto, la instalacion nunca se concluye, el setup se queda conjelado.
En resumen no he podido instalar CygWin sobre WindowsXP ! ! ! !
Alguien podria ayudarme en este problema o indicarme donde encontrar informacion al respecto.
Muchas gracias. Saludos.
@Victor Pues no sabría decirte. Yo he instalado Cygwin en muchos Windows XP y sin ningún problema. Eso sí, asegúrate de estar instalando una versión actual.
Gracias por el comentario.
La version que he tratado de instalar seguramente es actual, pues lo hago desde internet.
Por otro lado no creo que sea problema de mi maquina pues he tenido el mismo problema en dos maquinas distintas, una de escrotio y otra una portable.
Posiblemente sea una eleccion erronea de las pociones de instalacion. ¿donde podria encontrar informacion detallada sobre las opciones de instalacion? (he encontrado algunos descripciones de como se instala pero son muy escuetas)
Gracias por la informacion.
@Victor Hasta donde yo he probado, una instalación en la que eliges todo por defecto me ha funcionado multitud de veces sin problemas. Tal vez sea un programa común que interfiere en ambas de tus máquinas. Yo probaría en un Windows XP recién instalado. Puesto que el Cygwin es un programa muy simple, no debería de dar problemas con ningún software.
Que tal Super coco.
Tome tu ultimo consejo, y ya comprobe que hay algun proceso de windows que debe estar interfiriendo con el setup de CygWin.
De hecho pude instalar Cygwin iniciando windows desde el modo de fallos, y solo asi el setup.exe no tuvo ningun contratiempo, todo se instalo limpiamente. Pero de nuevo al reiniciar windows en modo normal, y ejecutar Cygwin no se ejecuta y presenta problemas.
Ya desinstale el antivirus y el cortafuegos, sin ningun exito. No se que proceso podria estar interfiriendo.
¿Tienes alguna idea de que tipo de proceso puede interferir con cygwin??
Gracias y hasta la proxima.
@Victor Pues ni idea… lo siento.
Saludos super coco:
hola que tal acabo de instalar cygwin incluyendo el paquete devel pero entonces porque no puedo
compilar archivos escrito en “C”? segun tutoriales solo basta con agregar a la instalcion el paquete devel
o me equivoco? , a una cosa mas porfa debo instalar algun paquete mas para trabajar con datos introducidos por el teclado?
bueno gracias por su ayuda bye…..
@pedro Para compilar programas en C tendrás que instalar paquetes como el
gcc
, elmake
, etc.. Si has instalado todos los paquetes de la categoría de “devel”, ya deberías de tener estas utilidades instaladas y deberías de poder compilar sin problemas.hola!
tengo un problema sobre como hacer q se ejecute un programa en cygwin, ya pude ejecutar cygwin y como necesito start x lo abro y busco ahi el archivo q deseo ejecutar por medio de ls c:/cygwin/usr y ahi lo encuetro. pero no puedo hacer que este se ejecute ya probe con la orden cd para colocarme en ese archivo, tambien con dir y me sale “not a directory” y cuando pongo el archivo q deseo q se ejecute osm.exe me sale “mail cd osm.exe” podrian ayudarmepara poder ejecutarlo? por favor.
Hola: Estoy enpezando con Cygwin y debo decir que es la mejor información en castellano
que encontré.-
voy a utilizar todos los consejos que das y despues les comento como me fué…
Desde ya estoy ETERNAMENTE agradecido!!!
SuperCOCO, me saco el sombrero ante tu capacidad y dominio del tema. Y aprovechando estas lineas, te hare una pregunta, ya que soy un cincuenton que conocio unix y vi antes que DOS y Notepad.
Donde yo estaba trabajando, reemplazaban el comando “ls -l” por “ll”, y asi agunos mas.
¿puedes indicarme que genero y donde lo coloco para lograr lo mismo?
Un respetuoso abrazo……jotaeme747
@jotaeme747 ¡Bienvenida sea siempre la experiencia!
Sobre lo que preguntas, edita el
.bashrc
de tu$HOME
y añade:mi problema es que tengo un cygwin montado en un servidor windows 2003
y no se como modificar el home de un usuario para que cuando se conecten con el puty el home en vez de ser c:xxxx sea d:xxxx