Welcome to mirror list, hosted at ThFree Co, Russian Federation.

effectively.sgml « doc « winsup - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b1e38c35c81fcf6deb12b7e33e21b9864f4d00a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
<sect1 id="using-effectively">
<title>Using Cygwin effectively with Windows</title>

<para>
Cygwin is not a full operating system, and so must rely on Windows for
accomplishing some tasks. For example, Cygwin provides a POSIX view
of the Windows filesystem, but does not provide filesystem drivers of 
its own. Therefore part of using Cygwin effectively is learning to use
Windows effectively. 
Many Windows utilities provide a good way to interact with Cygwin's 
predominately command-line environment. For example, 
<command>ipconfig.exe</command> provides information about network 
configuration, and <command>net.exe</command> views and configures
network file and printer resources.  Most of these tools
support the <literal>/?</literal> switch to display usage information. 
</para>

<para>
Unfortunately, no standard set of tools included with all versions of 
Windows exists.  If you are unfamiliar with the tools available 
on your system, here is a general guide.  Windows NT 4.0 has only a basic 
set of tools, which later versions of Windows expanded. 
Microsoft also provides free downloads for Windows NT 4.0 (the Resource Kit 
Support Tools), Windows 2000 (the Resource Kit Tools), and XP (the 
Windows Support Tools).  Generally, the younger the Windows version, the
more complete are the on-board tools.  Additionally, many independent sites
such as 
<ulink url="http://download.com">download.com</ulink>, 
<ulink url="http://simtel.net">simtel.net</ulink>, 
and Microsoft's own
<ulink url="http://technet.microsoft.com/en-us/sysinternals/default.aspx">Sysinternals</ulink>
provide quite useful command-line utilities, as far as they are not
already provided by Cygwin.  A few Windows tools, such as 
<command>find.exe</command>, <command>link.exe</command> and
<command>sort.exe</command>, may conflict with the Cygwin versions
make sure that you use the full path (<command>/usr/bin/find</command>)
or that your Cygwin <literal>bin</literal> directory comes first in your
<envar>PATH</envar>.
</para>

<sect2 id="using-pathnames-effectively"> <title>Pathnames</title>

<para>
Windows programs do not understand POSIX pathnames, so any arguments 
that reference the filesystem must be in Windows (or DOS) format or 
translated.  Cygwin provides the <command>cygpath</command> utility for 
converting between Windows and POSIX paths. A complete description of its 
options and examples of its usage are in <xref linkend="cygpath"></xref>, 
including a shell script for starting Windows Explorer in any directory. 
The same format works for most Windows programs, for example 
<screen>
<literal>notepad.exe "$(cygpath -aw "Desktop/Phone Numbers.txt")"</literal>
</screen>
A few programs require a Windows-style, semicolon-delimited path list, 
which <command>cygpath</command> can translate from a POSIX path with the
<literal>-p</literal> option. For example, a Java compilation from 
<command>bash</command> might look like this: 
<screen>
<literal>javac -cp "$(cygpath -pw "$CLASSPATH")" hello.java</literal>
</screen>
Since using quoting and subshells is somewhat awkward, it is often 
preferable to use <command>cygpath</command> in shell scripts.
</para>

</sect2>

<sect2 id="using-console"> <title>Console Programs</title>
<para>
Another issue is receiving output from or giving input to console-based 
Windows programs.  Unfortunately, interacting with Windows console 
applications is not a simple matter of using a translation utility. Windows 
console applications are designed to run under 
<command>cmd.exe</command>, and some do not deal gracefully with other
situations.  Cygwin can receive console input only if it
is also running in a console window since Windows does not provide
any way to attach to the backend of the console device. Another
traditional Unix input/output method, ptys (pseudo-terminals), is
supported by Cygwin but not entirely by Windows.  The basic problem is 
that a Cygwin pty is a pipe and some Windows applications do not like 
having their input or output redirected to pipes.  
</para>

<para>
To help deal with these issues, Cygwin supports customizable levels of 
Windows versus Unix compatibility behavior.  To be most compatible with 
Windows programs, use a DOS prompt, running only the occasional Cygwin 
command or script. Next would be to run <command>bash</command> within 
a default DOS box. To make Cygwin more Unix compatible in this case, 
set <envar>CYGWIN=tty</envar> (see <xref linkend="using-cygwinenv"></xref>).
Alternatively, the optional <systemitem>rxvt</systemitem> package provides 
a native-Windows version of the popular X11 terminal emulator (it is not 
necessary to set <envar>CYGWIN=tty</envar> with <command>rxvt</command>). 
Using <command>rxvt.exe</command> provides the most Unix-like environment, 
but expect some compatibility problems with Windows programs.
</para>

</sect2>

<sect2 id="using-net"> <title>Cygwin and Windows Networking</title>
<para>
Many popular Cygwin packages, such as <systemitem>ncftp</systemitem>, 
<systemitem>lynx</systemitem>, and <systemitem>wget</systemitem>, require a 
network connection.  Since Cygwin relies on Windows for connectivity, 
if one of these tools is not working as expected you may need to 
troubleshoot using Windows tools. The first test is to see if you
can reach the URL's host with <command>ping.exe</command>, one of the 
few utilities included with every Windows version since Windows 95.
If you chose to install the <systemitem>inetutils</systemitem> package, 
you may have both
Windows and Cygwin versions of utilities such as <command>ftp</command>
and <command>telnet</command>. If you are having problems using one
of these programs, see if the alternate one works as expected. 
</para>

<para>
There are a variety of other programs available for specific situations.
If your system does not have an always-on network connection, you 
may be interested in <command>rasdial.exe</command> for automating dialup
connections.  
Users who frequently change their network 
configuration can script these changes with <command>netsh.exe</command> 
(Windows 2000 and later). For proxy users, the open source 
<ulink url="http://apserver.sourceforge.net">
NTLM Authorization Proxy Server</ulink> or the no-charge
<ulink url="http://www.hummingbird.com/products/nc/socks/index.html">
Hummingbird SOCKS Proxy</ulink> may allow you to use Cygwin network
programs in your environment.
</para>

</sect2>

<sect2 id="using-cygutils"><title>The cygutils package</title>

<para>
The optional <systemitem>cygutils</systemitem> package contains
miscellaneous tools that are small enough to not require their own package.
It is not included in a default Cygwin install; select it from the Utils
category in <command>setup.exe</command>. Several of the
<systemitem>cygutils</systemitem> tools are useful for interacting with
Windows.</para>

<para>
One of the hassles of Unix-Windows interoperability is the different line 
endings on text files.  As mentioned in <xref linkend="using-textbinary"></xref>, 
Unix tools such as <command>tr</command> can convert between CRLF and LF 
endings, but <systemitem>cygutils</systemitem> provides several dedicated programs: 
<command>conv</command>, <command>d2u</command>, <command>dos2unix</command>, 
<command>u2d</command>, and <command>unix2dos</command>. Use the
<literal>--help</literal> switch for usage information. 
</para>
</sect2>

<sect2 id="using-shortcuts"><title>Creating shortcuts with cygutils</title>
<para>
Another problem area is between Unix-style links, which link one file
to another, and Microsoft .lnk files, which provide a shortcut to a
file.  They seem similar at first glance but, in reality, are fairly 
different.  By default, Cygwin uses a mechanism that creates symbolic
links that are compatible with standard Microsoft .lnk files. However,
they do not include much of the information that is available in a 
standard Microsoft shortcut, such as the working directory, an icon, 
etc.  The <systemitem>cygutils</systemitem> package includes a 
<command>mkshortcut</command> 
utility for creating standard Microsoft .lnk files.
</para>

<para>
If Cygwin handled these native shortcuts like any other symlink, 
you could not archive Microsoft .lnk files into <command>tar</command>
archives and keep all the information in them.  After unpacking, 
these shortcuts would have lost all the extra information and would
be no different than standard Cygwin symlinks. Therefore these two types 
of links are treated differently.  Unfortunately, this means that the 
usual Unix way of creating and using symlinks does not work with 
Windows shortcuts. 
</para>
</sect2>
  
<sect2 id="using-printing"><title>Printing with cygutils</title>
<para>
There are several options for printing from Cygwin, including the 
<command>lpr</command> found in <systemitem>cygutils</systemitem> (not to be confused with the 
native Windows <command>lpr.exe</command>). The easiest way to use <systemitem>cygutils</systemitem>' 
<command>lpr</command> is to specify a default device name in the 
<envar>PRINTER</envar> environment variable.  You may also specify a device 
on the command line with the <literal>-d</literal> or <literal>-P</literal> 
options, which will override the environment variable setting. 
</para>

<para>
A device name 
may be a UNC path (<literal>\\server_name\printer_name</literal>), a reserved 
DOS device name (<literal>prn</literal>, <literal>lpt1</literal>), or a 
local port name that is mapped to a printer share. Note that forward slashes 
may be used in a UNC path (<literal>//server_name/printer_name</literal>),
which is helpful when using <command>lpr</command> from a shell that uses
the backslash as an escape character. 
</para>

<para>
<command>lpr</command> sends raw data to the printer; no formatting is done.
Many, but not all, printers accept plain text as input. If your printer 
supports PostScript, packages such as 
<systemitem>a2ps</systemitem> and <systemitem>enscript</systemitem> can prepare 
text files for printing. The <systemitem>ghostscript</systemitem> package also 
provides some translation
from PostScript to various native printer languages. Additionally, a native 
Windows application for printing PostScript, <command>gsprint</command>, is 
available from the <ulink url="http://www.cs.wisc.edu/~ghost/">Ghostscript
website</ulink>.
</para>

</sect2>

</sect1>