2109 lines
97 KiB
XML
2109 lines
97 KiB
XML
<?xml version="1.0" encoding='UTF-8'?>
|
|
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
|
|
|
<sect1 id="using-utils">
|
|
<title>Cygwin Utilities</title>
|
|
|
|
<para>Cygwin comes with a number of command-line utilities that are used to
|
|
manage the UNIX emulation portion of the Cygwin environment. While many of
|
|
these reflect their UNIX counterparts, each was written specifically for
|
|
Cygwin. You may use the long or short option names interchangeably; for
|
|
example, <literal>--help</literal> and <literal>-h</literal> function
|
|
identically. All of the Cygwin command-line utilities support the
|
|
<literal>--help</literal> and <literal>--version</literal> options. </para>
|
|
|
|
<sect2 id="cygcheck">
|
|
<title>cygcheck</title>
|
|
|
|
<screen>
|
|
Usage: cygcheck [-v] [-h] PROGRAM
|
|
cygcheck -c [-d] [PACKAGE]
|
|
cygcheck -s [-r] [-v] [-h]
|
|
cygcheck -k
|
|
cygcheck -f FILE [FILE]...
|
|
cygcheck -l [PACKAGE]...
|
|
cygcheck -p REGEXP
|
|
cygcheck --delete-orphaned-installation-keys
|
|
cygcheck --enable-unique-object-names Cygwin-DLL
|
|
cygcheck --disable-unique-object-names Cygwin-DLL
|
|
cygcheck --show-unique-object-names Cygwin-DLL
|
|
cygcheck -h
|
|
|
|
List system information, check installed packages, or query package database.
|
|
|
|
At least one command option or a PROGRAM is required, as shown above.
|
|
|
|
PROGRAM list library (DLL) dependencies of PROGRAM
|
|
-c, --check-setup show installed version of PACKAGE and verify integrity
|
|
(or for all installed packages if none specified)
|
|
-d, --dump-only just list packages, do not verify (with -c)
|
|
-s, --sysinfo produce diagnostic system information (implies -c -d)
|
|
-r, --registry also scan registry for Cygwin settings (with -s)
|
|
-k, --keycheck perform a keyboard check session (must be run from a
|
|
plain console only, not from a pty/rxvt/xterm)
|
|
-f, --find-package find the package to which FILE belongs
|
|
-l, --list-package list contents of PACKAGE (or all packages if none given)
|
|
-p, --package-query search for REGEXP in the entire cygwin.com package
|
|
repository (requires internet connectivity)
|
|
--delete-orphaned-installation-keys
|
|
Delete installation keys of old, now unused
|
|
installations from the registry. Requires the right
|
|
to change the registry.
|
|
--enable-unique-object-names Cygwin-DLL
|
|
--disable-unique-object-names Cygwin-DLL
|
|
--show-unique-object-names Cygwin-DLL
|
|
Enable, disable, or show the setting of the
|
|
\"unique object names\" setting in the Cygwin DLL
|
|
given as argument to this option. The DLL path must
|
|
be given as valid Windows(!) path.
|
|
See the users guide for more information.
|
|
If you don't know what this means, don't change it.
|
|
-v, --verbose produce more verbose output
|
|
-h, --help annotate output with explanatory comments when given
|
|
with another command, otherwise print this help
|
|
-V, --version print the version of cygcheck and exit
|
|
|
|
Note: -c, -f, and -l only report on packages that are currently installed. To
|
|
search all official Cygwin packages use -p instead. The -p REGEXP matches
|
|
package names, descriptions, and names of files/paths within all packages.
|
|
</screen>
|
|
|
|
<para> The <command>cygcheck</command> program is a diagnostic utility for
|
|
dealing with Cygwin programs. If you are familiar with
|
|
<command>dpkg</command> or <command>rpm</command>,
|
|
<command>cygcheck</command> is similar in many ways. (The major
|
|
difference is that <command>setup.exe</command> handles installing and
|
|
uninstalling packages; see <xref linkend="internet-setup"/> for more
|
|
information.) </para>
|
|
<para> The <literal>-c</literal> option checks the version and status of
|
|
installed Cygwin packages. If you specify one or more package names,
|
|
<command>cygcheck</command> will limit its output to those packages, or
|
|
with no arguments it lists all packages. A package will be marked
|
|
<literal>Incomplete</literal> if files originally installed are no longer
|
|
present. The best thing to do in that situation is reinstall the package
|
|
with <command>setup.exe</command>. To see which files are missing, use
|
|
the <literal>-v</literal> option. If you do not need to know the status
|
|
of each package and want <command>cygcheck</command> to run faster, add
|
|
the <literal>-d</literal> option and <command>cygcheck</command> will
|
|
only output the name and version for each package. </para>
|
|
<para> If you list one or more programs on the command line,
|
|
<command>cygcheck</command> will diagnose the runtime environment of that
|
|
program or programs, providing the names of DLL files on which the
|
|
program depends. If you specify the <literal>-s</literal> option,
|
|
<command>cygcheck</command> will give general system information. If you
|
|
list one or more programs on the command line and specify
|
|
<literal>-s</literal>, <command>cygcheck</command> will report on
|
|
both.</para>
|
|
<para> The <literal>-f</literal> option helps you to track down which
|
|
package a file came from, and <literal>-l</literal> lists all files in a
|
|
package. For example, to find out about
|
|
<filename>/usr/bin/less</filename> and its package: <example
|
|
id="utils-cygcheck-ex"><title>Example <command>cygcheck</command>
|
|
usage</title>
|
|
<screen>
|
|
$ cygcheck -f /usr/bin/less
|
|
less-381-1
|
|
|
|
$ cygcheck -l less
|
|
/usr/bin/less.exe
|
|
/usr/bin/lessecho.exe
|
|
/usr/bin/lesskey.exe
|
|
/usr/man/man1/less.1
|
|
/usr/man/man1/lesskey.1
|
|
</screen>
|
|
</example> </para>
|
|
|
|
<para>The <literal>-h</literal> option prints additional helpful messages
|
|
in the report, at the beginning of each section. It also adds table
|
|
column headings. While this is useful information, it also adds some to
|
|
the size of the report, so if you want a compact report or if you know
|
|
what everything is already, just leave this out.</para>
|
|
|
|
<para>The <literal>-v</literal> option causes the output to be more
|
|
verbose. What this means is that additional information will be reported
|
|
which is usually not interesting, such as the internal version numbers of
|
|
DLLs, additional information about recursive DLL usage, and if a file in
|
|
one directory in the PATH also occurs in other directories on the PATH. </para>
|
|
|
|
<para>The <literal>-r</literal> option causes <command>cygcheck</command>
|
|
to search your registry for information that is relevant to Cygwin
|
|
programs. These registry entries are the ones that have "Cygwin" in the
|
|
name. If you are paranoid about privacy, you may remove information from
|
|
this report, but please keep in mind that doing so makes it harder to
|
|
diagnose your problems.</para>
|
|
|
|
<para>In contrast to the other options that search the packages that are
|
|
installed on your local system, the <literal>-p</literal> option can be
|
|
used to search the entire official Cygwin package repository. It takes as
|
|
argument a Perl-compatible regular expression which is used to match
|
|
package names, package descriptions, and path/filenames of the contents
|
|
of packages. This feature requires an active internet connection, since
|
|
it must query the <literal>cygwin.com</literal> web site. In fact, it is
|
|
equivalent to the search that is available on the <ulink
|
|
url="http://cygwin.com/packages/">Cygwin package listing</ulink>
|
|
page.</para>
|
|
|
|
<para>For example, perhaps you are getting an error because you are missing
|
|
a certain DLL and you want to know which package includes that file:
|
|
<example id="utils-search-ex"><title>Searching all packages for a
|
|
file</title>
|
|
<screen>
|
|
$ cygcheck -p 'cygintl-2\.dll'
|
|
Found 1 matches for 'cygintl-2\.dll'.
|
|
|
|
libintl2-0.12.1-3 GNU Internationalization runtime library
|
|
|
|
$ cygcheck -p 'libexpat.*\.a'
|
|
Found 2 matches for 'libexpat.*\.a'.
|
|
|
|
expat-1.95.7-1 XML parser library written in C
|
|
expat-1.95.8-1 XML parser library written in C
|
|
|
|
$ cygcheck -p '/ls\.exe'
|
|
Found 2 matches for '/ls\.exe'.
|
|
|
|
coreutils-5.2.1-5 GNU core utilities (includes fileutils, sh-utils and textutils)
|
|
coreutils-5.3.0-6 GNU core utilities (includes fileutils, sh-utils and textutils)
|
|
</screen>
|
|
</example> </para>
|
|
|
|
<para>Note that this option takes a regular expression, not a glob or
|
|
wildcard. This means that you need to use <literal>.*</literal> if you
|
|
want something similar to the wildcard <literal>*</literal> commonly used
|
|
in filename globbing. Similarly, to match the period character you should
|
|
use <literal>\.</literal> since the <literal>.</literal> character in a
|
|
regexp is a metacharacter that will match any character. Also be aware
|
|
that the characters such as <literal>\</literal> and <literal>*</literal>
|
|
are shell metacharacters, so they must be either escaped or quoted, as in
|
|
the example above.</para>
|
|
|
|
<para>The third example above illustrates that if you want to match a whole
|
|
filename, you should include the <literal>/</literal> path seperator. In
|
|
the given example this ensures that filenames that happen to end in
|
|
<literal>ls.exe</literal> such as <literal>ncftpls.exe</literal> are not
|
|
shown. Note that this use does not mean "look for packages with
|
|
<literal>ls</literal> in the root directory," since the
|
|
<literal>/</literal> can match anywhere in the path. It's just there to
|
|
anchor the match so that it matches a full filename.</para>
|
|
|
|
<para>By default the matching is case-sensitive. To get a case insensitive
|
|
match, begin your regexp with <literal>(?i)</literal> which is a
|
|
PCRE-specific feature. For complete documentation on Perl-compatible
|
|
regular expression syntax and options, read the <command>perlre</command>
|
|
manpage, or one of many websites such as <literal>perldoc.com</literal>
|
|
that document the Perl language.</para>
|
|
|
|
<para>The <command>cygcheck</command> program should be used to send
|
|
information about your system for troubleshooting when requested. When
|
|
asked to run this command save the output so that you can email it, for
|
|
example:</para>
|
|
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>cygcheck -s -v -r -h > cygcheck_output.txt</userinput>
|
|
</screen>
|
|
|
|
<para> Each Cygwin DLL stores its path and installation key in the
|
|
registry. This allows troubleshooting of problems which could be a result
|
|
of having multiple concurrent Cygwin installations. However, if you're
|
|
experimenting a lot with different Cygwin installation paths, your
|
|
registry could accumulate a lot of old Cygwin installation entries for
|
|
which the installation doesn't exist anymore. To get rid of these
|
|
orphaned registry entries, use the <command>cygcheck
|
|
--delete-orphaned-installation-keys</command> command.</para>
|
|
|
|
<para> Each Cygwin DLL generates a key value from its installation path.
|
|
This value is not only stored in the registry, it's also used to generate
|
|
global object names used for interprocess communication. This keeps
|
|
different Cygwin installations separate. Processes running under a Cygwin
|
|
DLL installed in C:\cygwin don't see processes running under a Cygwin DLL
|
|
installed in C:\Program Files\cygwin. This allows running multiple
|
|
versions of Cygwin DLLs without these versions to interfere with each
|
|
other, or to run small third-party installations for a specific purpose
|
|
independently from a Cygwin net distribution. </para>
|
|
|
|
<para> For debugging purposes it could be desired that the various Cygwin
|
|
DLLs use the same key, independently from their installation paths. If
|
|
the DLLs have different versions, trying to run processes under these
|
|
DLLs concurrently will result in error messages like this one:</para>
|
|
|
|
<screen>
|
|
*** shared version mismatch detected - 0x8A88009C/0x75BE0074.
|
|
This problem is probably due to using incompatible versions of the Cygwin DLL.
|
|
Search for cygwin1.dll using the Windows Start->Find/Search facility
|
|
and delete all but the most recent version. The most recent version *should*
|
|
reside in x:\\cygwin\\bin, where 'x' is the drive on which you have
|
|
installed the cygwin distribution. Rebooting is also suggested if you
|
|
are unable to find another Cygwin DLL.
|
|
</screen>
|
|
|
|
<para> To disable the usage of a unique key value of a certain Cygwin DLL,
|
|
use the <command>cygcheck --disable-unique-object-names
|
|
Cygwin-DLL</command> command. <literal>Cygwin-DLL</literal> is the
|
|
Windows path (*not* a Cygwin POSIX path) to the DLL for which you want to
|
|
disable this feature. Note that you have to stop all Cygwin processes
|
|
running under this DLL, before you're allowed to change this setting. For
|
|
instance, run <command>cygcheck</command> from a DOS command line for
|
|
this purpose.</para>
|
|
|
|
<para>To re-enable the usage of a unique key, use the <command>cygcheck
|
|
--enable-unique-object-names Cygwin-DLL</command> command. This option
|
|
has the same characteristics as the
|
|
<literal>--disable-unique-object-names</literal> option</para>
|
|
|
|
<para>Finally, you can use <command>cygcheck --show-unique-object-names
|
|
Cygwin-DLL</command> to find out if the given Cygwin DLL use unique
|
|
object names or not. In contrast to the <literal>--disable-...</literal>
|
|
and <literal>--enable-...</literal> options, the
|
|
<literal>--show-unique-object-names</literal> option also works for
|
|
Cygwin DLLs which are currently in use.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="cygpath">
|
|
<title>cygpath</title>
|
|
|
|
<screen>
|
|
Usage: cygpath (-d|-m|-u|-w|-t TYPE) [-f FILE] [OPTION]... NAME...
|
|
cygpath [-c HANDLE]
|
|
cygpath [-ADHOPSW]
|
|
cygpath [-F ID]
|
|
|
|
Convert Unix and Windows format paths, or output system path information
|
|
|
|
Output type options:
|
|
|
|
-d, --dos print DOS (short) form of NAMEs (C:\PROGRA~1\)
|
|
-m, --mixed like --windows, but with regular slashes (C:/WINNT)
|
|
-M, --mode report on mode of file (currently binmode or textmode)
|
|
-u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt)
|
|
-w, --windows print Windows form of NAMEs (C:\WINNT)
|
|
-t, --type TYPE print TYPE form: 'dos', 'mixed', 'unix', or 'windows'
|
|
|
|
Path conversion options:
|
|
|
|
-a, --absolute output absolute path
|
|
-l, --long-name print Windows long form of NAMEs (with -w, -m only)
|
|
-p, --path NAME is a PATH list (i.e., '/bin:/usr/bin')
|
|
-s, --short-name print DOS (short) form of NAMEs (with -w, -m only)
|
|
-C, --codepage CP print DOS, Windows, or mixed pathname in Windows
|
|
codepage CP. CP can be a numeric codepage identifier,
|
|
or one of the reserved words ANSI, OEM, or UTF8.
|
|
If this option is missing, cygpath defaults to the
|
|
character set defined by the current locale.
|
|
|
|
System information:
|
|
|
|
-A, --allusers use `All Users' instead of current user for -D, -P
|
|
-D, --desktop output `Desktop' directory and exit
|
|
-H, --homeroot output `Profiles' directory (home root) and exit
|
|
-O, --mydocs output `My Documents' directory and exit
|
|
-P, --smprograms output Start Menu `Programs' directory and exit
|
|
-S, --sysdir output system directory and exit
|
|
-W, --windir output `Windows' directory and exit
|
|
-F, --folder ID output special folder with numeric ID and exit
|
|
|
|
Other options:
|
|
|
|
-f, --file FILE read FILE for input; use - to read from STDIN
|
|
-o, --option read options from FILE as well (for use with --file)
|
|
-c, --close HANDLE close HANDLE (for use in captured process)
|
|
-i, --ignore ignore missing argument
|
|
-h, --help output usage information and exit
|
|
-V, --version output version information and exit
|
|
</screen>
|
|
|
|
<para>The <command>cygpath</command> program is a utility that converts
|
|
Windows native filenames to Cygwin POSIX-style pathnames and vice versa.
|
|
It can be used when a Cygwin program needs to pass a file name to a
|
|
native Windows program, or expects to get a file name from a native
|
|
Windows program. Alternatively, <command>cygpath</command> can output
|
|
information about the location of important system directories in either
|
|
format. </para>
|
|
|
|
<para>The <literal>-u</literal> and <literal>-w</literal> options indicate
|
|
whether you want a conversion to UNIX (POSIX) format
|
|
(<literal>-u</literal>) or to Windows format (<literal>-w</literal>). Use
|
|
the <literal>-d</literal> to get DOS-style (8.3) file and path names. The
|
|
<literal>-m</literal> option will output Windows-style format but with
|
|
forward slashes instead of backslashes. This option is especially useful
|
|
in shell scripts, which use backslashes as an escape character.</para>
|
|
|
|
<para> In combination with the <literal>-w</literal> option, you can use
|
|
the <literal>-l</literal> and <literal>-s</literal> options to use normal
|
|
(long) or DOS-style (short) form. The <literal>-d</literal> option is
|
|
identical to <literal>-w</literal> and <literal>-s</literal> together. </para>
|
|
|
|
<para>The <literal>-C</literal> option allows to specify a Windows codepage
|
|
to print DOS and Windows paths created with one of the
|
|
<literal>-d</literal>, <literal>-m</literal>, or <literal>-w</literal>
|
|
options. The default is to use the character set of the current locale
|
|
defined by one of the internationalization environment variables
|
|
<envar>LC_ALL</envar>, <envar>LC_CTYPE</envar>, or <envar>LANG</envar>,
|
|
see <xref linkend="setup-locale"/>. This is sometimes not sufficient for
|
|
interaction with native Windows tools, which might expect native,
|
|
non-ASCII characters in a specific Windows codepage. Console tools, for
|
|
instance, might expect pathnames in the current OEM codepage, while
|
|
graphical tools like Windows Explorer might expect pathnames in the
|
|
current ANSI codepage.</para>
|
|
|
|
<para>The <literal>-C</literal> option takes a single parameter:</para>
|
|
<itemizedlist spacing="compact">
|
|
<listitem>
|
|
<para><literal>ANSI</literal>, to specify the current ANSI
|
|
codepage</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para><literal>OEM</literal>, to specify the current OEM (console)
|
|
codepage</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para><literal>UTF8</literal>, to specify UTF-8.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>A numerical, decimal codepage number, for instance 936 for GBK,
|
|
28593 for ISO-8859-3, etc. A full list of supported codepages is
|
|
listed on the Microsoft MSDN page <ulink
|
|
url="http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx"
|
|
>Code Page Identifiers</ulink>. A codepage of 0 is the same as if the
|
|
<literal>-C</literal> hasn't been specified at all.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>The <literal>-p</literal> option means that you want to convert a
|
|
path-style string rather than a single filename. For example, the PATH
|
|
environment variable is semicolon-delimited in Windows, but
|
|
colon-delimited in UNIX. By giving <literal>-p</literal> you are
|
|
instructing <command>cygpath</command> to convert between these
|
|
formats.</para>
|
|
|
|
<para>The <literal>-i</literal> option supresses the print out of the usage
|
|
message if no filename argument was given. It can be used in make file
|
|
rules converting variables that may be omitted to a proper format. Note
|
|
that <command>cygpath</command> output may contain spaces (C:\Program
|
|
Files) so should be enclosed in quotes. </para>
|
|
|
|
|
|
<example id="utils-cygpath-ex">
|
|
<title>Example <command>cygpath</command> usage</title>
|
|
<screen>
|
|
<![CDATA[
|
|
#!/bin/sh
|
|
if [ "${1}" = "" ];
|
|
then
|
|
XPATH=".";
|
|
else
|
|
XPATH="$(cygpath -C ANSI -w "${1}")";
|
|
fi
|
|
explorer $XPATH &
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
|
|
<para>The capital options <literal>-D</literal>, <literal>-H</literal>,
|
|
<literal>-P</literal>, <literal>-S</literal>, and <literal>-W</literal>
|
|
output directories used by Windows that are not the same on all systems,
|
|
for example <literal>-S</literal> might output C:\WINNT\system32 or
|
|
C:\Windows\System32. The <literal>-H</literal> shows the Windows profiles
|
|
directory that can be used as root of home. The <literal>-A</literal>
|
|
option forces use of the "All Users" directories instead of the current
|
|
user for the <literal>-D</literal>, <literal>-O</literal> and
|
|
<literal>-P</literal> options. The <literal>-F</literal> outputs other
|
|
special folders specified by their internal numeric code (decimal or
|
|
0x-prefixed hex). For valid codes and symbolic names, see the CSIDL_*
|
|
definitions in the include file /usr/include/w32api/shlobj.h from package
|
|
w32api. The current valid range of codes for folders is 0 (Desktop) to 59
|
|
(CDBurn area). By default the output is in UNIX (POSIX) format; use the
|
|
<literal>-w</literal> or <literal>-d</literal> options to get other
|
|
formats.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="dumper">
|
|
<title>dumper</title>
|
|
|
|
<screen>
|
|
Usage: dumper [OPTION] FILENAME WIN32PID
|
|
|
|
Dump core from WIN32PID to FILENAME.core
|
|
|
|
-d, --verbose be verbose while dumping
|
|
-h, --help output help information and exit
|
|
-q, --quiet be quiet while dumping (default)
|
|
-V, --version output version information and exit
|
|
</screen>
|
|
|
|
<para>The <command>dumper</command> utility can be used to create a core
|
|
dump of running Windows process. This core dump can be later loaded to
|
|
<command>gdb</command> and analyzed. One common way to use
|
|
<command>dumper</command> is to plug it into cygwin's Just-In-Time
|
|
debugging facility by adding
|
|
<screen>
|
|
error_start=x:\path\to\dumper.exe
|
|
</screen> to the
|
|
<emphasis>CYGWIN</emphasis> environment variable. Please note that
|
|
<literal>x:\path\to\dumper.exe</literal> is Windows-style and not cygwin
|
|
path. If <literal>error_start</literal> is set this way, then dumper will
|
|
be started whenever some program encounters a fatal error. </para>
|
|
|
|
<para> <command>dumper</command> can be also be started from the command
|
|
line to create a core dump of any running process. Unfortunately, because
|
|
of a Windows API limitation, when a core dump is created and
|
|
<command>dumper</command> exits, the target process is terminated too. </para>
|
|
|
|
<para> To save space in the core dump, <command>dumper</command> doesn't
|
|
write those portions of target process' memory space that are loaded from
|
|
executable and dll files and are unchangeable, such as program code and
|
|
debug info. Instead, <command>dumper</command> saves paths to files which
|
|
contain that data. When a core dump is loaded into gdb, it uses these
|
|
paths to load appropriate files. That means that if you create a core
|
|
dump on one machine and try to debug it on another, you'll need to place
|
|
identical copies of the executable and dlls in the same directories as on
|
|
the machine where the core dump was created. </para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="getconf">
|
|
<title>getconf</title>
|
|
|
|
<screen>
|
|
Usage: getconf [-v specification] variable_name [pathname]
|
|
getconf -a [pathname]
|
|
|
|
Get configuration values
|
|
|
|
-v specification Indicate specific version for which configuration
|
|
values shall be fetched.
|
|
-a, --all Print all known configuration values
|
|
|
|
Other options:
|
|
|
|
-h, --help This text
|
|
-V, --version Print program version and exit
|
|
</screen>
|
|
|
|
<para>The <command>getconf</command> utility prints the value of the
|
|
configuration variable specified by <literal>variable_name</literal>. If
|
|
no <literal>pathname</literal> is given, <command>getconf</command>
|
|
serves as a wrapper for the <literal>confstr</literal> and
|
|
<literal>sysconf</literal> functions, supporting the symbolic constants
|
|
defined in the <literal>limits.h</literal> and
|
|
<literal>unistd.h</literal> headers, without their respective
|
|
<literal>_CS_</literal> or <literal>_SC_</literal> prefixes. </para>
|
|
|
|
<para>If <literal>pathname</literal> is given, <command>getconf</command>
|
|
prints the value of the configuration variable for the specified
|
|
pathname. In this form, <command>getconf</command> serves as a wrapper
|
|
for the <literal>pathconf</literal> function, supporting the symbolic
|
|
constants defined in the <literal>unistd.h</literal> header, without the
|
|
<literal>_PC_</literal> prefix. </para>
|
|
|
|
<para>If you specify the <literal>-v</literal> option, the parameter
|
|
denotes a specification for which the value of the configuration variable
|
|
should be printed. Note that the only specifications supported by Cygwin
|
|
are <literal>POSIX_V7_ILP32_OFFBIG</literal> and the legacy
|
|
<literal>POSIX_V6_ILP32_OFFBIG</literal> and
|
|
<literal>XBS5_ILP32_OFFBIG</literal> equivalents.</para>
|
|
|
|
<para>Use the <literal>-a</literal> option to print a list of all available
|
|
configuration variables for the system, or given
|
|
<literal>pathname</literal>, and their values.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="getfacl">
|
|
<title>getfacl</title>
|
|
|
|
<screen>
|
|
Usage: getfacl [-adn] FILE [FILE2...]
|
|
|
|
Display file and directory access control lists (ACLs).
|
|
|
|
-a, --all display the filename, the owner, the group, and
|
|
the ACL of the file
|
|
-d, --dir display the filename, the owner, the group, and
|
|
the default ACL of the directory, if it exists
|
|
-h, --help output usage information and exit
|
|
-n, --noname display user and group IDs instead of names
|
|
-V, --version output version information and exit
|
|
|
|
When multiple files are specified on the command line, a blank
|
|
line separates the ACLs for each file.
|
|
</screen>
|
|
|
|
<para> For each argument that is a regular file, special file or directory,
|
|
<command>getfacl</command> displays the owner, the group, and the ACL.
|
|
For directories <command>getfacl</command> displays additionally the
|
|
default ACL. With no options specified, <command>getfacl</command>
|
|
displays the filename, the owner, the group, the setuid (s), setgid (s),
|
|
and sticky (t) bits if available, and both the ACL and the default ACL,
|
|
if it exists. For more information on Cygwin and Windows ACLs, see
|
|
<xref linkend="ntsec"/> in the Cygwin User's Guide. The format
|
|
for ACL output is as follows:
|
|
<screen>
|
|
# file: filename
|
|
# owner: name or uid
|
|
# group: name or uid
|
|
# flags: sst
|
|
user::perm
|
|
user:name or uid:perm
|
|
group::perm
|
|
group:name or gid:perm
|
|
mask:perm
|
|
other:perm
|
|
default:user::perm
|
|
default:user:name or uid:perm
|
|
default:group::perm
|
|
default:group:name or gid:perm
|
|
default:mask:perm
|
|
default:other:perm
|
|
</screen>
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="kill">
|
|
<title>kill</title>
|
|
|
|
<screen>
|
|
Usage: kill [-f] [-signal] [-s signal] pid1 [pid2 ...]
|
|
kill -l [signal]
|
|
|
|
Send signals to processes
|
|
|
|
-f, --force force, using win32 interface if necessary
|
|
-l, --list print a list of signal names
|
|
-s, --signal send signal (use kill --list for a list)
|
|
-h, --help output usage information and exit
|
|
-V, --version output version information and exit
|
|
</screen>
|
|
|
|
<para>The <command>kill</command> program allows you to send arbitrary
|
|
signals to other Cygwin programs. The usual purpose is to end a running
|
|
program from some other window when ^C won't work, but you can also send
|
|
program-specified signals such as SIGUSR1 to trigger actions within the
|
|
program, like enabling debugging or re-opening log files. Each program
|
|
defines the signals they understand.</para>
|
|
|
|
<para>You may need to specify the full path to use <command>kill</command>
|
|
from within some shells, including <command>bash</command>, the default
|
|
Cygwin shell. This is because <command>bash</command> defines a
|
|
<command>kill</command> builtin function; see the <command>bash</command>
|
|
man page under <emphasis>BUILTIN COMMANDS</emphasis> for more
|
|
information. To make sure you are using the Cygwin version, try
|
|
<screen>
|
|
$ /bin/kill --version
|
|
</screen> which should give the Cygwin
|
|
<command>kill</command> version number and copyright information. </para>
|
|
|
|
<para>Unless you specific the <literal>-f</literal> option, the "pid"
|
|
values used by <command>kill</command> are the Cygwin pids, not the
|
|
Windows pids. To get a list of running programs and their Cygwin pids,
|
|
use the Cygwin <command>ps</command> program. <command>ps -W</command>
|
|
will display <emphasis>all</emphasis> windows pids.</para>
|
|
|
|
<para>The <command>kill -l</command> option prints the name of the given
|
|
signal, or a list of all signal names if no signal is given.</para>
|
|
|
|
<para>To send a specific signal, use the <literal>-signN</literal> option,
|
|
either with a signal number or a signal name (minus the "SIG" part), as
|
|
shown in these examples:</para>
|
|
|
|
<example id="utils-kill-ex">
|
|
<title>Using the kill command</title>
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>kill 123</userinput>
|
|
<prompt>$</prompt> <userinput>kill -1 123</userinput>
|
|
<prompt>$</prompt> <userinput>kill -HUP 123</userinput>
|
|
<prompt>$</prompt> <userinput>kill -f 123</userinput>
|
|
</screen>
|
|
</example>
|
|
|
|
<para>Here is a list of available signals, their numbers, and some
|
|
commentary on them, from the file
|
|
<literal><sys/signal.h></literal>, which should be considered the
|
|
official source of this information.</para>
|
|
|
|
<screen>
|
|
SIGHUP 1 hangup
|
|
SIGINT 2 interrupt
|
|
SIGQUIT 3 quit
|
|
SIGILL 4 illegal instruction (not reset when caught)
|
|
SIGTRAP 5 trace trap (not reset when caught)
|
|
SIGABRT 6 used by abort
|
|
SIGEMT 7 EMT instruction
|
|
SIGFPE 8 floating point exception
|
|
SIGKILL 9 kill (cannot be caught or ignored)
|
|
SIGBUS 10 bus error
|
|
SIGSEGV 11 segmentation violation
|
|
SIGSYS 12 bad argument to system call
|
|
SIGPIPE 13 write on a pipe with no one to read it
|
|
SIGALRM 14 alarm clock
|
|
SIGTERM 15 software termination signal from kill
|
|
SIGURG 16 urgent condition on IO channel
|
|
SIGSTOP 17 sendable stop signal not from tty
|
|
SIGTSTP 18 stop signal from tty
|
|
SIGCONT 19 continue a stopped process
|
|
SIGCHLD 20 to parent on child stop or exit
|
|
SIGCLD 20 System V name for SIGCHLD
|
|
SIGTTIN 21 to readers pgrp upon background tty read
|
|
SIGTTOU 22 like TTIN for output if (tp->t_local&LTOSTOP)
|
|
SIGIO 23 input/output possible
|
|
SIGPOLL 23 System V name for SIGIO
|
|
SIGXCPU 24 exceeded CPU time limit
|
|
SIGXFSZ 25 exceeded file size limit
|
|
SIGVTALRM 26 virtual time alarm
|
|
SIGPROF 27 profiling time alarm
|
|
SIGWINCH 28 window changed
|
|
SIGLOST 29 resource lost (eg, record-lock lost)
|
|
SIGPWR 29 power failure
|
|
SIGUSR1 30 user defined signal 1
|
|
SIGUSR2 31 user defined signal 2
|
|
</screen>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="ldd">
|
|
<title>ldd</title>
|
|
|
|
<screen>
|
|
Usage: ldd [OPTION]... FILE...
|
|
|
|
Print shared library dependencies
|
|
|
|
-h, --help print this help and exit
|
|
-V, --version print version information and exit
|
|
-r, --function-relocs process data and function relocations
|
|
(currently unimplemented)
|
|
-u, --unused print unused direct dependencies
|
|
(currently unimplemented)
|
|
-v, --verbose print all information
|
|
(currently unimplemented)
|
|
</screen>
|
|
|
|
<para><command>ldd</command> prints the shared libraries (DLLs) an
|
|
executable or DLL is linked against. No modifying option is implemented
|
|
yet.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="locale">
|
|
<title>locale</title>
|
|
|
|
<screen>
|
|
Usage: locale [-amvhV]
|
|
or: locale [-ck] NAME
|
|
or: locale [-usfnU]
|
|
|
|
Get locale-specific information.
|
|
|
|
System information:
|
|
|
|
-a, --all-locales List all available supported locales
|
|
-m, --charmaps List all available character maps
|
|
-v, --verbose More verbose output
|
|
|
|
Modify output format:
|
|
|
|
-c, --category-name List information about given category NAME
|
|
-k, --keyword-name Print information about given keyword NAME
|
|
|
|
Default locale information:
|
|
|
|
-u, --user Print locale of user's default UI language
|
|
-s, --system Print locale of system default UI language
|
|
-f, --format Print locale of user's regional format settings
|
|
(time, numeric & monetary)
|
|
-n, --no-unicode Print system default locale for non-Unicode programs
|
|
-U, --utf Attach \".UTF-8\" to the result
|
|
|
|
Other options:
|
|
|
|
-h, --help This text
|
|
-V, --version Print program version and exit
|
|
</screen>
|
|
|
|
<para><command>locale</command> without parameters prints information about
|
|
the current locale environment settings.</para>
|
|
|
|
<para>The <literal>-u</literal>, <literal>-s</literal>,
|
|
<literal>-f</literal>, and <literal>-n</literal> options can be used to
|
|
request the various Windows locale settings. The purpose is to use this
|
|
command in scripts to set the POSIX locale variables.</para>
|
|
|
|
<para>The <literal>-u</literal> option prints the current user's Windows UI
|
|
locale to stdout. In Windows Vista and Windows 7 this setting is called
|
|
the "Display Language"; there was no corresponding user setting in
|
|
Windows XP. The <literal>-s</literal> option prints the systems default
|
|
instead. The <literal>-f</literal> option prints the user's setting for
|
|
time, date, number and currency. That's equivalent to the setting in the
|
|
"Formats" or "Regional Options" tab in the "Region and Language" or
|
|
"Regional and Language Options" dialog. With the <literal>-U</literal>
|
|
option <command>locale</command> appends a ".UTF-8".</para>
|
|
|
|
<para>Usage example:</para>
|
|
|
|
<screen>
|
|
bash$ export LANG=$(locale -uU)
|
|
bash$ echo $LANG
|
|
en_US.UTF-8
|
|
bash$ export LC_TIME=$(locale -fU)
|
|
bash$ echo $LC_TIME
|
|
de_DE.UTF-8
|
|
</screen>
|
|
|
|
<para>The <literal>-a</literal> option is helpful to learn which locales
|
|
are supported by your Windows machine. It prints all available locales
|
|
and the allowed modifiers. Example:</para>
|
|
|
|
<screen>
|
|
bash$ locale -a
|
|
C
|
|
C.utf8
|
|
POSIX
|
|
af_ZA
|
|
af_ZA.utf8
|
|
am_ET
|
|
am_ET.utf8
|
|
...
|
|
be_BY
|
|
be_BY.utf8
|
|
be_BY@latin
|
|
...
|
|
ca_ES
|
|
ca_ES.utf8
|
|
ca_ES@euro
|
|
catalan
|
|
...
|
|
</screen>
|
|
|
|
<para>The <literal>-v</literal> option prints more detailed information
|
|
about each available locale. Example:</para>
|
|
|
|
<screen>
|
|
bash$ locale -av
|
|
locale: af_ZA archive: /cygdrive/c/Windows/system32/kernel32.dll
|
|
-------------------------------------------------------------------------------
|
|
language | Afrikaans
|
|
territory | South Africa
|
|
codeset | ISO-8859-1
|
|
|
|
locale: af_ZA.utf8 archive: /cygdrive/c/Windows/system32/kernel32.dll
|
|
-------------------------------------------------------------------------------
|
|
language | Afrikaans
|
|
territory | South Africa
|
|
codeset | UTF-8
|
|
|
|
...
|
|
|
|
locale: ca_ES@euro archive: /cygdrive/c/Windows/system32/kernel32.dll
|
|
-------------------------------------------------------------------------------
|
|
language | Catalan
|
|
territory | Spain
|
|
codeset | ISO-8859-15
|
|
|
|
locale: catalan archive: /usr/share/locale/locale.alias
|
|
-------------------------------------------------------------------------------
|
|
language | Catalan
|
|
territory | Spain
|
|
codeset | ISO-8859-1
|
|
|
|
...
|
|
</screen>
|
|
|
|
<para>The <literal>-m</literal> option prints the names of the available
|
|
charmaps supported by Cygwin to stdout.</para>
|
|
|
|
<para>Otherwise, if arguments are given, <command>locale</command> prints
|
|
the values assigned to these arguments. Arguments can be names of locale
|
|
categories (for instance: LC_CTYPE, LC_MONETARY), or names of keywords
|
|
supported in the locale categories (for instance: thousands_sep,
|
|
charmap). The <literal>-c</literal> option prints additionally the name
|
|
of the category. The <literal>-k</literal> option prints additionally the
|
|
name of the keyword. Example:</para>
|
|
|
|
<screen>
|
|
bash$ locale -ck LC_MESSAGES
|
|
LC_MESSAGES
|
|
yesexpr="^[yY]"
|
|
noexpr="^[nN]"
|
|
yesstr="yes"
|
|
nostr="no"
|
|
messages-codeset="UTF-8"
|
|
bash$ locale noexpr
|
|
^[nN]
|
|
</screen>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="minidumper"><title>minidumper</title>
|
|
|
|
<screen>
|
|
Usage: minidumper [OPTION] FILENAME WIN32PID
|
|
|
|
Write minidump from WIN32PID to FILENAME.dmp
|
|
|
|
-t, --type minidump type flags
|
|
-n, --nokill don't terminate the dumped process
|
|
-d, --verbose be verbose while dumping
|
|
-h, --help output help information and exit
|
|
-q, --quiet be quiet while dumping (default)
|
|
-V, --version output version information and exit
|
|
</screen>
|
|
|
|
<para>
|
|
The <command>minidumper</command> utility can be used to create a
|
|
minidump of a running Windows process. This minidump can be later
|
|
analysed using breakpad or Windows debugging tools.
|
|
</para>
|
|
|
|
<para>
|
|
<command>minidumper</command> can be used with cygwin's Just-In-Time
|
|
debugging facility in exactly the same way as <command>dumper</command>
|
|
(See <xref linkend="dumper"></xref>).
|
|
</para>
|
|
|
|
<para>
|
|
<command>minidumper</command> can also be started from the command line to
|
|
create a minidump of any running process. For compatibility with
|
|
<command>dumper</command> the target process is terminated after dumping
|
|
unless the <literal>-n</literal> option is given.
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="mkgroup">
|
|
<title>mkgroup</title>
|
|
|
|
<screen>
|
|
Usage: mkgroup [OPTION]...
|
|
|
|
Write /etc/group-like output to stdout
|
|
|
|
Don't use this command to generate a local /etc/group file, unless you
|
|
really need one. See the Cygwin User's Guide for more information.
|
|
|
|
Options:
|
|
|
|
-l,--local [machine] print local groups
|
|
(from local machine if no machine specified)
|
|
-L,--Local machine ditto, but generate groupname with machine prefix
|
|
-d,--domain [domain] print domain groups
|
|
(from current domain if no domain specified)
|
|
-c,--current print current group
|
|
-S,--separator char for -l use character char as domain\group
|
|
separator in groupname instead of default '+'
|
|
-o,--id-offset offset change the default offset (0x10000) added to
|
|
gids of foreign machine accounts.
|
|
-g,--group groupname only return information for the specified group
|
|
one of -l, -d must be specified, too
|
|
-b,--no-builtin don't print BUILTIN groups
|
|
-U,--unix grouplist print UNIX groups when using -l on a UNIX Samba
|
|
server. grouplist is a comma-separated list of
|
|
groupnames or gid ranges (root,-25,50-100).
|
|
(enumerating large ranges can take a long time!)
|
|
-h,--help print this message
|
|
-v,--version print version information and exit
|
|
|
|
Default is to print local groups on stand-alone machines, plus domain
|
|
groups on domain controllers and domain member machines.
|
|
</screen>
|
|
|
|
<para>The <command>mkgroup</command> program can be used to create a local
|
|
<filename>/etc/group</filename> file. Cygwin doesn't need this file,
|
|
because it reads group information from the Windows account databases,
|
|
but you can add an <filename>/etc/group</filename> file for instance, if
|
|
your machine is often disconnected from its domain controller.
|
|
</para>
|
|
|
|
<para>Note that this information is static, in contrast to the information
|
|
automatically gathered by Cygwin from the Windows account databases. If
|
|
you change the group information on your system, you'll need to regenerate
|
|
the group file for it to have the new information.</para>
|
|
|
|
<para>By default, the information generated by <command>mkgroup</command>
|
|
is equivalent to the information generated by Cygwin itself. The
|
|
<literal>-d</literal> and <literal>-l/-L</literal> options allow you to
|
|
specify where the information comes from, some domain, or the local SAM
|
|
of a machine. Note that you can only enumerate accounts from trusted
|
|
domains. Any non-trusted domain will be ignored. Access-restrictions
|
|
of your current account apply. The <literal>-l/-L</literal> when used
|
|
with a machine name, tries to contact that machine to enumerate local
|
|
groups of other machines, typically outside of domains. This scenario
|
|
cannot be covered by Cygwin's account automatism. If you want to use
|
|
the <literal>-L</literal> option, but you don't like the default
|
|
domain/group separator from <filename>/etc/nsswitch.conf</filename>,
|
|
you can specify another separator using the <literal>-S</literal> option,
|
|
for instance:</para>
|
|
|
|
<example id="utils-mkgroup-ex">
|
|
<title>Setting up group entry for current user with different
|
|
domain/group separator</title>
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>mkgroup -L server1 -S= > /etc/group</userinput>
|
|
</screen>
|
|
</example>
|
|
|
|
<para>For very simple needs, an entry for the current user's group can be
|
|
created by using the option <literal>-c</literal>.</para>
|
|
|
|
<para>The <literal>-o</literal> option allows for (unlikely) special cases
|
|
with multiple machines where the GIDs might match otherwise. The
|
|
<literal>-g</literal> option only prints the information for one group.
|
|
The <literal>-U</literal> option allows you to enumerate the standard
|
|
UNIX groups on a Samba machine. It's used together with <literal>-l
|
|
samba-server</literal> or <literal>-L samba-server</literal>. The normal
|
|
UNIX groups are usually not enumerated, but they can show up as a group
|
|
in <command>ls -l</command> output. </para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="mkpasswd">
|
|
<title>mkpasswd</title>
|
|
|
|
<screen>
|
|
Usage: mkpasswd [OPTIONS]...
|
|
|
|
Write /etc/passwd-like output to stdout
|
|
|
|
Don't use this command to generate a local /etc/passwd file, unless you
|
|
really need one. See the Cygwin User's Guide for more information.
|
|
|
|
Options:
|
|
|
|
-l,--local [machine] print local user accounts
|
|
(from local machine if no machine specified)
|
|
-L,--Local machine ditto, but generate username with machine prefix
|
|
-d,--domain [domain] print domain accounts
|
|
(from current domain if no domain specified)
|
|
-c,--current print current user
|
|
-S,--separator char for -l use character char as domain\user
|
|
separator in username instead of the default '+'
|
|
-o,--id-offset offset change the default offset (0x10000) added to uids
|
|
in domain or foreign server accounts.
|
|
-u,--username username only return information for the specified user
|
|
one of -l, -d must be specified, too
|
|
-b,--no-builtin don't print BUILTIN users
|
|
-p,--path-to-home path use specified path instead of user account home dir
|
|
or /home prefix
|
|
-U,--unix userlist print UNIX users when using -l on a UNIX Samba
|
|
server. userlist is a comma-separated list of
|
|
usernames or uid ranges (root,-25,50-100).
|
|
(enumerating large ranges can take a long time!)
|
|
-h,--help displays this message
|
|
-V,--version version information and exit
|
|
|
|
Default is to print local accounts on stand-alone machines, domain accounts
|
|
on domain controllers and domain member machines.
|
|
</screen>
|
|
|
|
<para>The <command>mkpasswd</command> program can be used to create a
|
|
<filename>/etc/passwd</filename> file. Cygwin doesn't need this file,
|
|
because it reads user information from the Windows account databases,
|
|
but you can add an <filename>/etc/passwd</filename> file, for instance
|
|
if your machine is often disconnected from its domain controller.</para>
|
|
|
|
<para>Note that this information is static, in contrast to the information
|
|
automatically gathered by Cygwin from the Windows account databases. If
|
|
you change the user information on your system, you'll need to regenerate
|
|
the passwd file for it to have the new information.</para>
|
|
|
|
<para>By default, the information generated by <command>mkpasswd</command>
|
|
is equivalent to the information generated by Cygwin itself. The
|
|
<literal>-d</literal> and <literal>-l/-L</literal> options allow you to
|
|
specify where the information comes from, some domain, or the local SAM
|
|
of a machine. Note that you can only enumerate accounts from trusted
|
|
domains. Any non-trusted domain will be ignored. Access-restrictions
|
|
of your current account apply. The <literal>-l/-L</literal> when used
|
|
with a machine name, tries to contact that machine to enumerate local
|
|
groups of other machines, typically outside of domains. This scenario
|
|
cannot be covered by Cygwin's account automatism. If you want to use
|
|
the <literal>-L</literal> option, but you don't like the default
|
|
domain/group separator from <filename>/etc/nsswitch.conf</filename>,
|
|
you can specify another separator using the <literal>-S</literal> option,
|
|
analog to <command>mkgroup</command>.</para>
|
|
|
|
<para>For very simple needs, an entry for the current user can be created
|
|
by using the option <literal>-c</literal>.</para>
|
|
|
|
<para>The <literal>-o</literal> option allows for special cases (such as
|
|
multiple domains) where the UIDs might match otherwise. The
|
|
<literal>-p</literal> option causes <command>mkpasswd</command> to use
|
|
the specified prefix instead of the account home dir or <literal>/home/
|
|
</literal>. For example, this command: <example id="utils-althome-ex"
|
|
><title>Using an alternate home root</title>
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>mkpasswd -l -p "$(cygpath -H)" > /etc/passwd</userinput>
|
|
</screen>
|
|
</example> would put local users' home directories in the Windows
|
|
'Profiles' directory. The <literal>-u</literal> option creates just an
|
|
entry for the specified user. The <literal>-U</literal> option allows you
|
|
to enumerate the standard UNIX users on a Samba machine. It's used
|
|
together with <literal>-l samba-server</literal> or <literal>-L
|
|
samba-server</literal>. The normal UNIX users are usually not enumerated,
|
|
but they can show up as file owners in <command>ls -l</command> output.
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="mount">
|
|
<title>mount</title>
|
|
|
|
<screen>
|
|
Usage: mount [OPTION] [<win32path> <posixpath>]
|
|
mount -a
|
|
mount <posixpath>
|
|
|
|
Display information about mounted filesystems, or mount a filesystem
|
|
|
|
-a, --all mount all filesystems mentioned in fstab
|
|
-c, --change-cygdrive-prefix change the cygdrive path prefix to <posixpath>
|
|
-f, --force force mount, don't warn about missing mount
|
|
point directories
|
|
-h, --help output usage information and exit
|
|
-m, --mount-entries write fstab entries to replicate mount points
|
|
and cygdrive prefixes
|
|
-o, --options X[,X...] specify mount options
|
|
-p, --show-cygdrive-prefix show user and/or system cygdrive path prefix
|
|
-V, --version output version information and exit
|
|
</screen>
|
|
|
|
<para>The <command>mount</command> program is used to map your drives and
|
|
shares onto Cygwin's simulated POSIX directory tree, much like as is done
|
|
by mount commands on typical UNIX systems. However, in contrast to mount
|
|
points given in <filename>/etc/fstab</filename>, mount points created or
|
|
changed with <command>mount</command> are not persistent. They disappear
|
|
immediately after the last process of the current user exited. Please see
|
|
<xref linkend="mount-table"/> for more information on the concepts behind
|
|
the Cygwin POSIX file system and strategies for using mounts. To remove
|
|
mounts temporarily, use <command>umount</command></para>
|
|
|
|
<sect3 id="utils-mount">
|
|
<title>Using mount</title>
|
|
|
|
<para>If you just type <command>mount</command> with no parameters, it
|
|
will display the current mount table for you.</para>
|
|
|
|
<example id="utils-mount-ex">
|
|
<title>Displaying the current set of mount points</title>
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>mount</userinput>
|
|
C:/cygwin/bin on /usr/bin type ntfs (binary)
|
|
C:/cygwin/lib on /usr/lib type ntfs (binary)
|
|
C:/cygwin on / type ntfs (binary)
|
|
C: on /mnt/c type ntfs (binary,user,noumount)
|
|
D: on /mnt/d type fat (binary,user,noumount)
|
|
</screen>
|
|
</example>
|
|
|
|
<para>In this example, c:/cygwin is the POSIX root and the D drive is
|
|
mapped to <filename>/mnt/d</filename>. Note that in this case, the root
|
|
mount is a system-wide mount point that is visible to all users running
|
|
Cygwin programs, whereas the <filename>/mnt/d</filename> mount is only
|
|
visible to the current user.</para>
|
|
|
|
<para>The <command>mount</command> utility is also the mechanism for
|
|
adding new mounts to the mount table in memory. The following example
|
|
demonstrates how to mount the directory
|
|
<filename>//pollux/home/joe/data</filename> to
|
|
<filename>/data</filename> for the duration of the current session. </para>
|
|
|
|
<example id="utils-mount-add-ex">
|
|
<title>Adding mount points</title>
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>ls /data</userinput>
|
|
ls: /data: No such file or directory
|
|
<prompt>$</prompt> <userinput>mount //pollux/home/joe/data /data</userinput>
|
|
mount: warning - /data does not exist!
|
|
<prompt>$</prompt> <userinput>mount</userinput>
|
|
//pollux/home/joe/data on /data type smbfs (binary)
|
|
C:/cygwin/bin on /usr/bin type ntfs (binary)
|
|
C:/cygwin/lib on /usr/lib type ntfs (binary)
|
|
C:/cygwin on / type ntfs (binary)
|
|
C: on /c type ntfs (binary,user,noumount)
|
|
D: on /d type fat (binary,user,noumount)
|
|
</screen>
|
|
</example>
|
|
|
|
<para>A given POSIX path may only exist once in the mount table. Attempts
|
|
to replace the mount will fail with a busy error. The
|
|
<literal>-f</literal> (force) option causes the old mount to be
|
|
silently replaced with the new one, provided the old mount point was a
|
|
user mount point. It's not valid to replace system-wide mount points.
|
|
Additionally, the <literal>-f</literal> option will silence warnings
|
|
about the non-existence of directories at the Win32 path
|
|
location.</para>
|
|
|
|
<para> The <literal>-o</literal> option is the method via which various
|
|
options about the mount point may be recorded. The following options
|
|
are available (note that most of the options are duplicates of other
|
|
mount flags):</para>
|
|
|
|
<screen>
|
|
acl - Use the filesystem's access control lists (ACLs) to
|
|
implement real POSIX permissions (default).
|
|
binary - Files default to binary mode (default).
|
|
bind - Allows to remount part of the file hierarchy somewhere else.
|
|
Different from other mount calls, the first argument
|
|
specifies an absolute POSIX path, rather than a Win32 path.
|
|
This POSIX path is remounted to the POSIX path specified as
|
|
the second parameter. The conversion to a Win32 path is done
|
|
within Cygwin immediately at the time of the call. Note that
|
|
symlinks are ignored while performing this path conversion.
|
|
cygexec - Treat all files below mount point as cygwin executables.
|
|
dos - Always convert leading spaces and trailing dots and spaces to
|
|
characters in the UNICODE private use area. This allows to use
|
|
broken filesystems which only allow DOS filenames, even if they
|
|
are not recognized as such by Cygwin.
|
|
exec - Treat all files below mount point as executable.
|
|
ihash - Always fake inode numbers rather than using the ones returned
|
|
by the filesystem. This allows to use broken filesystems which
|
|
don't return unambiguous inode numbers, even if they are not
|
|
recognized as such by Cygwin.
|
|
noacl - Ignore ACLs and fake POSIX permissions.
|
|
nosuid - No suid files are allowed (currently unimplemented)
|
|
notexec - Treat all files below mount point as not executable.
|
|
override - Override immutable mount points.
|
|
posix=0 - Switch off case sensitivity for paths under this mount point.
|
|
posix=1 - Switch on case sensitivity for paths under this mount point
|
|
(default).
|
|
sparse - Switch on support for sparse files. This option only makes
|
|
sense on NTFS and then only if you really need sparse files.
|
|
text - Files default to CRLF text mode line endings.
|
|
</screen>
|
|
|
|
<para>For a more complete description of the mount options and the
|
|
<filename>/etc/fstab</filename> file, see <xref linkend="mount-table"
|
|
/>.</para>
|
|
|
|
<para>Note that all mount points added with <command>mount</command> are
|
|
user mount points. System mount points can only be specified in the
|
|
<filename>/etc/fstab</filename> file.</para>
|
|
|
|
<para>If you added mount points to <filename>/etc/fstab</filename> or
|
|
your <filename>/etc/fstab.d/<username></filename> file, you can
|
|
add these mount points to your current user session using the
|
|
<literal>-a/--all</literal> option, or by specifing the posix path
|
|
alone on the command line. As an example, consider you added a mount
|
|
point with the POSIX path <filename>/my/mount</filename>. You can add
|
|
this mount point with either one of the following two commands to your
|
|
current user session.</para>
|
|
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>mount /my/mount</userinput>
|
|
<prompt>$</prompt> <userinput>mount -a</userinput>
|
|
</screen>
|
|
|
|
<para>The first command just adds the <filename>/my/mount</filename>
|
|
mount point to your current session, the <command>mount -a</command>
|
|
adds all new mount points to your user session.</para>
|
|
|
|
<para>If you change a mount point to point to another native path, or if
|
|
you changed the flags of a mount point, you have to
|
|
<command>umount</command> the mount point first, before you can add it
|
|
again. Please note that all such added mount points are added as user
|
|
mount points, and that the rule that system mount points can't be
|
|
removed or replaced in a running session still applies.</para>
|
|
|
|
<para>To bind a POSIX path to another POSIX path, use the
|
|
<literal>bind</literal> mount flag.</para>
|
|
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>mount -o bind /var /usr/var</userinput>
|
|
</screen>
|
|
|
|
<para>This command makes the file hirarchy under
|
|
<filename>/var</filename> additionally available under
|
|
<filename>/usr/var</filename>.</para>
|
|
|
|
<para> The <literal>-m</literal> option causes the
|
|
<command>mount</command> utility to output the current mount table in a
|
|
series of fstab entries. You can save this output as a backup when
|
|
experimenting with the mount table. Copy the output to
|
|
<filename>/etc/fstab</filename> to restore the old state. It also makes
|
|
moving your settings to a different machine much easier.</para>
|
|
|
|
</sect3>
|
|
|
|
<sect3 id="utils-cygdrive">
|
|
<title>Cygdrive mount points</title>
|
|
|
|
<para>Whenever Cygwin cannot use any of the existing mounts to convert
|
|
from a particular Win32 path to a POSIX one, Cygwin will, instead,
|
|
convert to a POSIX path using a default mount point:
|
|
<filename>/cygdrive</filename>. For example, if Cygwin accesses
|
|
<filename>z:\foo</filename> and the z drive is not currently in the
|
|
mount table, then <filename>z:\</filename> will be accessible as
|
|
<filename>/cygdrive/z</filename>. The <command>mount</command> utility
|
|
can be used to change this default automount prefix through the use of
|
|
the "--change-cygdrive-prefix" option. In the following example, we
|
|
will set the automount prefix to <filename>/mnt</filename>:</para>
|
|
|
|
<example id="utils-cygdrive-ex">
|
|
<title>Changing the default prefix</title>
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>mount --change-cygdrive-prefix /mnt</userinput>
|
|
</screen>
|
|
</example>
|
|
|
|
<para>Note that the cygdrive prefix can be set both per-user and
|
|
system-wide, and that as with all mounts, a user-specific mount takes
|
|
precedence over the system-wide setting. The <command>mount</command>
|
|
utility creates system-wide mounts by default if you do not specify a
|
|
type. You can always see the user and system cygdrive prefixes with the
|
|
<literal>-p</literal> option. Using the <literal>--options</literal>
|
|
flag with <literal>--change-cygdrive-prefix</literal> makes all new
|
|
automounted filesystems default to this set of options. For instance
|
|
(using the short form of the command line flags)</para>
|
|
|
|
<example id="utils-cygdrive-ex2">
|
|
<title>Changing the default prefix with specific mount options</title>
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>mount -c /mnt -o binary,noacl</userinput>
|
|
</screen>
|
|
</example>
|
|
|
|
|
|
</sect3>
|
|
|
|
<sect3 id="utils-limitations">
|
|
<title>Limitations</title>
|
|
|
|
<para>Limitations: there is a hard-coded limit of 64 mount points (up to
|
|
Cygwin 1.7.9: 30 mount points). Also, although you can mount to
|
|
pathnames that do not start with "/", there is no way to make use of
|
|
such mount points.</para>
|
|
|
|
<para>Normally the POSIX mount point in Cygwin is an existing empty
|
|
directory, as in standard UNIX. If this is the case, or if there is a
|
|
place-holder for the mount point (such as a file, a symbolic link
|
|
pointing anywhere, or a non-empty directory), you will get the expected
|
|
behavior. Files present in a mount point directory before the mount
|
|
become invisible to Cygwin programs. </para>
|
|
|
|
<para>It is sometimes desirable to mount to a non-existent directory, for
|
|
example to avoid cluttering the root directory with names such as
|
|
<filename>a</filename>, <filename>b</filename>, <filename>c</filename>
|
|
pointing to disks. Although <command>mount</command> will give you a
|
|
warning, most everything will work properly when you refer to the mount
|
|
point explicitly. Some strange effects can occur however. For example
|
|
if your current working directory is <filename>/dir</filename>, say,
|
|
and <filename>/dir/mtpt</filename> is a mount point, then
|
|
<filename>mtpt</filename> will not show up in an <command>ls</command>
|
|
or <command>echo *</command> command and <command>find .</command> will
|
|
not find <filename>mtpt</filename>. </para>
|
|
|
|
</sect3>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="passwd">
|
|
<title>passwd</title>
|
|
|
|
<screen>
|
|
Usage: passwd [OPTION] [USER]
|
|
|
|
Change USER's password or password attributes.
|
|
|
|
User operations:
|
|
-l, --lock lock USER's account.
|
|
-u, --unlock unlock USER's account.
|
|
-c, --cannot-change USER can't change password.
|
|
-C, --can-change USER can change password.
|
|
-e, --never-expires USER's password never expires.
|
|
-E, --expires USER's password expires according to system's
|
|
password aging rule.
|
|
-p, --pwd-not-required no password required for USER.
|
|
-P, --pwd-required password is required for USER.
|
|
-R, --reg-store-pwd enter password to store it in the registry for
|
|
later usage by services to be able to switch
|
|
to this user context with network credentials.
|
|
|
|
System operations:
|
|
-i, --inactive NUM set NUM of days before inactive accounts are disabled
|
|
(inactive accounts are those with expired passwords).
|
|
-n, --minage MINDAYS set system minimum password age to MINDAYS days.
|
|
-x, --maxage MAXDAYS set system maximum password age to MAXDAYS days.
|
|
-L, --length LEN set system minimum password length to LEN.
|
|
|
|
Other options:
|
|
-d, --logonserver SERVER connect to SERVER (e.g. domain controller).
|
|
Default server is the local system, unless
|
|
changing the current user, in which case the
|
|
default is the content of $LOGONSERVER.
|
|
-S, --status display password status for USER (locked, expired,
|
|
etc.) plus global system password settings.
|
|
-h, --help output usage information and exit.
|
|
-V, --version output version information and exit.
|
|
|
|
If no option is given, change USER's password. If no user name is given,
|
|
operate on current user. System operations must not be mixed with user
|
|
operations. Don't specify a USER when triggering a system operation.
|
|
|
|
Don't specify a user or any other option together with the -R option.
|
|
Non-Admin users can only store their password if cygserver is running.
|
|
Note that storing even obfuscated passwords in the registry is not overly
|
|
secure. Use this feature only if the machine is adequately locked down.
|
|
Don't use this feature if you don't need network access within a remote
|
|
session. You can delete your stored password by using `passwd -R' and
|
|
specifying an empty password.
|
|
</screen>
|
|
|
|
<para> <command>passwd</command> changes passwords for user accounts. A
|
|
normal user may only change the password for their own account, but
|
|
administrators may change passwords on any account.
|
|
<command>passwd</command> also changes account information, such as
|
|
password expiry dates and intervals.</para>
|
|
|
|
<para>For password changes, the user is first prompted for their old
|
|
password, if one is present. This password is then encrypted and compared
|
|
against the stored password. The user has only one chance to enter the
|
|
correct password. The administrators are permitted to bypass this step so
|
|
that forgotten passwords may be changed.</para>
|
|
|
|
<para>The user is then prompted for a replacement password.
|
|
<command>passwd</command> will prompt twice for this replacement and
|
|
compare the second entry against the first. Both entries are required to
|
|
match in order for the password to be changed.</para>
|
|
|
|
<para>After the password has been entered, password aging information is
|
|
checked to see if the user is permitted to change their password at this
|
|
time. If not, <command>passwd</command> refuses to change the password
|
|
and exits.</para>
|
|
|
|
<para> To get current password status information, use the
|
|
<literal>-S</literal> option. Administrators can use
|
|
<command>passwd</command> to perform several account maintenance
|
|
functions (users may perform some of these functions on their own
|
|
accounts). Accounts may be locked with the <literal>-l</literal> flag and
|
|
unlocked with the <literal>-u</literal> flag. Similarly,
|
|
<literal>-c</literal> disables a user's ability to change passwords, and
|
|
<literal>-C</literal> allows a user to change passwords. For password
|
|
expiry, the <literal>-e</literal> option disables expiration, while the
|
|
<literal>-E</literal> option causes the password to expire according to
|
|
the system's normal aging rules. Use <literal>-p</literal> to disable the
|
|
password requirement for a user, or <literal>-P</literal> to require a
|
|
password. </para>
|
|
|
|
<para>Administrators can also use <command>passwd</command> to change
|
|
system-wide password expiry and length requirements with the
|
|
<literal>-i</literal>, <literal>-n</literal>, <literal>-x</literal>, and
|
|
<literal>-L</literal> options. The <literal>-i</literal> option is used
|
|
to disable an account after the password has been expired for a number of
|
|
days. After a user account has had an expired password for
|
|
<emphasis>NUM</emphasis> days, the user may no longer sign on to the
|
|
account. The <literal>-n</literal> option is used to set the minimum
|
|
number of days before a password may be changed. The user will not be
|
|
permitted to change the password until <emphasis>MINDAYS</emphasis> days
|
|
have elapsed. The <literal>-x</literal> option is used to set the maximum
|
|
number of days a password remains valid. After
|
|
<emphasis>MAXDAYS</emphasis> days, the password is required to be
|
|
changed. Allowed values for the above options are 0 to 999. The
|
|
<literal>-L</literal> option sets the minimum length of allowed passwords
|
|
for users who don't belong to the administrators group to
|
|
<emphasis>LEN</emphasis> characters. Allowed values for the minimum
|
|
password length are 0 to 14. In any of the above cases, a value of 0
|
|
means `no restrictions'.</para>
|
|
|
|
<para> All operations affecting the current user are by default run against
|
|
the logon server of the current user (taken from the environment variable
|
|
<envar>LOGONSERVER</envar>. When password or account information of other
|
|
users should be changed, the default server is the local system. To
|
|
change a user account on a remote machine, use the <literal>-d</literal>
|
|
option to specify the machine to run the command against. Note that the
|
|
current user must be a valid member of the administrators group on the
|
|
remote machine to perform such actions. </para>
|
|
|
|
<para>Users can use the <command>passwd -R</command> to enter a password
|
|
which then gets stored in a special area of the registry on the local
|
|
system, which is also used by Windows to store passwords of accounts
|
|
running Windows services. When a privileged Cygwin application calls the
|
|
<command>set{e}uid(user_id)</command> system call, Cygwin checks if a
|
|
password for that user has been stored in this registry area. If so, it
|
|
uses this password to switch to this user account using that password.
|
|
This allows you to logon through, for instance, <command>ssh</command>
|
|
with public key authentication and get a full qualified user token with
|
|
all credentials for network access. However, the method has some
|
|
drawbacks security-wise. This is explained in more detail in <xref
|
|
linkend="ntsec"/>.</para>
|
|
|
|
<para>Please note that storing passwords in that registry area is a
|
|
privileged operation which only administrative accounts are allowed to
|
|
do. Administrators can enter the password for other user accounts into
|
|
the registry by specifying the username on the commandline. If normal,
|
|
non-admin users should be allowed to enter their passwords using
|
|
<command>passwd -R</command>, it's required to run
|
|
<command>cygserver</command> as a service under the LocalSystem account
|
|
before running <command>passwd -R</command>. This only affects storing
|
|
passwords. Using passwords in privileged processes does not require
|
|
<command>cygserver</command> to run.</para>
|
|
|
|
<para>Limitations: Users may not be able to change their password on some
|
|
systems.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="pldd">
|
|
<title>pldd</title>
|
|
|
|
<screen>
|
|
Usage: pldd [OPTION...] PID
|
|
|
|
List dynamic shared objects loaded into a process.
|
|
|
|
-?, --help Give this help list
|
|
--usage Give a short usage message
|
|
-V, --version Print program version
|
|
</screen>
|
|
|
|
<para><command>pldd</command> prints the shared libraries (DLLs) loaded by
|
|
the process with the given PID.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="ps">
|
|
<title>ps</title>
|
|
|
|
<screen>
|
|
Usage: ps [-aefls] [-u UID]
|
|
|
|
Report process status
|
|
|
|
-a, --all show processes of all users
|
|
-e, --everyone show processes of all users
|
|
-f, --full show process uids, ppids
|
|
-h, --help output usage information and exit
|
|
-l, --long show process uids, ppids, pgids, winpids
|
|
-p, --process show information for specified PID
|
|
-s, --summary show process summary
|
|
-u, --user list processes owned by UID
|
|
-V, --version output version information and exit
|
|
-W, --windows show windows as well as cygwin processes
|
|
With no options, ps outputs the long format by default
|
|
</screen>
|
|
|
|
<para>The <command>ps</command> program gives the status of all the Cygwin
|
|
processes running on the system (ps = "process status"). Due to the
|
|
limitations of simulating a POSIX environment under Windows, there is
|
|
little information to give. </para>
|
|
|
|
<para> The PID column is the process ID you need to give to the
|
|
<command>kill</command> command. The PPID is the parent process ID, and
|
|
PGID is the process group ID. The WINPID column is the process ID
|
|
displayed by NT's Task Manager program. The TTY column gives which
|
|
pseudo-terminal a process is running on, or a <literal>'?'</literal> for
|
|
services. The UID column shows which user owns each process. STIME is the
|
|
time the process was started, and COMMAND gives the name of the program
|
|
running. Listings may also have a status flag in column zero;
|
|
<literal>S</literal> means stopped or suspended (in other words, in the
|
|
background), <literal>I</literal> means waiting for input or interactive
|
|
(foreground), and <literal>O</literal> means waiting to output. </para>
|
|
|
|
<para> By default, <command>ps</command> will only show processes owned by
|
|
the current user. With either the <literal>-a</literal> or
|
|
<literal>-e</literal> option, all user's processes (and system processes)
|
|
are listed. There are historical UNIX reasons for the synonomous options,
|
|
which are functionally identical. The <literal>-f</literal> option
|
|
outputs a "full" listing with usernames for UIDs. The
|
|
<literal>-l</literal> option is the default display mode, showing a
|
|
"long" listing with all the above columns. The other display option is
|
|
<literal>-s</literal>, which outputs a shorter listing of just PID, TTY,
|
|
STIME, and COMMAND. The <literal>-u</literal> option allows you to show
|
|
only processes owned by a specific user. The <literal>-p</literal> option
|
|
allows you to show information for only the process with the specified
|
|
PID. The <literal>-W</literal> option causes <command>ps</command> show
|
|
non-Cygwin Windows processes as well as Cygwin processes. The WINPID is
|
|
also the PID, and they can be killed with the Cygwin
|
|
<command>kill</command> command's <literal>-f</literal> option. </para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="regtool">
|
|
<title>regtool</title>
|
|
|
|
<screen>
|
|
Usage: regtool [OPTION] (add|check|get|list|remove|unset|load|unload|save) KEY
|
|
|
|
View or edit the Win32 registry
|
|
|
|
Actions:
|
|
|
|
add KEY\SUBKEY add new SUBKEY
|
|
check KEY exit 0 if KEY exists, 1 if not
|
|
get KEY\VALUE prints VALUE to stdout
|
|
list KEY list SUBKEYs and VALUEs
|
|
remove KEY remove KEY
|
|
set KEY\VALUE [data ...] set VALUE
|
|
unset KEY\VALUE removes VALUE from KEY
|
|
load KEY\SUBKEY PATH load hive from PATH into new SUBKEY
|
|
unload KEY\SUBKEY unload hive and remove SUBKEY
|
|
save KEY\SUBKEY PATH save SUBKEY into new hive PATH
|
|
|
|
Options for 'list' Action:
|
|
|
|
-k, --keys print only KEYs
|
|
-l, --list print only VALUEs
|
|
-p, --postfix like ls -p, appends '\' postfix to KEY names
|
|
|
|
Options for 'get' Action:
|
|
|
|
-b, --binary print REG_BINARY data as hex bytes
|
|
-n, --none print data as stream of bytes as stored in registry
|
|
-x, --hex print numerical data as hex numbers
|
|
|
|
Options for 'set' Action:
|
|
|
|
-b, --binary set type to REG_BINARY (hex args or '-')
|
|
-D, --dword-be set type to REG_DWORD_BIG_ENDIAN
|
|
-e, --expand-string set type to REG_EXPAND_SZ
|
|
-i, --integer set type to REG_DWORD
|
|
-m, --multi-string set type to REG_MULTI_SZ
|
|
-n, --none set type to REG_NONE
|
|
-Q, --qword set type to REG_QWORD
|
|
-s, --string set type to REG_SZ
|
|
|
|
Options for 'set' and 'unset' Actions:
|
|
|
|
-K<c>, --key-separator[=]<c> set key separator to <c> instead of '\'
|
|
|
|
Other Options:
|
|
|
|
-h, --help output usage information and exit
|
|
-q, --quiet no error output, just nonzero return if KEY/VALUE missing
|
|
-v, --verbose verbose output, including VALUE contents when applicable
|
|
-w, --wow64 access 64 bit registry view (ignored on 32 bit Windows)
|
|
-W, --wow32 access 32 bit registry view (ignored on 32 bit Windows)
|
|
-V, --version output version information and exit
|
|
|
|
KEY is in the format [host]\prefix\KEY\KEY\VALUE, where host is optional
|
|
remote host in either \\hostname or hostname: format and prefix is any of:
|
|
root HKCR HKEY_CLASSES_ROOT (local only)
|
|
config HKCC HKEY_CURRENT_CONFIG (local only)
|
|
user HKCU HKEY_CURRENT_USER (local only)
|
|
machine HKLM HKEY_LOCAL_MACHINE
|
|
users HKU HKEY_USERS
|
|
|
|
You can use forward slash ('/') as a separator instead of backslash, in
|
|
that case backslash is treated as escape character
|
|
Example: regtool.exe get '\user\software\Microsoft\Clock\iFormat'
|
|
</screen>
|
|
|
|
<para>The <command>regtool</command> program allows shell scripts to access
|
|
and modify the Windows registry. Note that modifying the Windows registry
|
|
is dangerous, and carelessness here can result in an unusable system. Be
|
|
careful.</para>
|
|
|
|
<para>The <literal>-v</literal> option means "verbose". For most commands,
|
|
this causes additional or lengthier messages to be printed. Conversely,
|
|
the <literal>-q</literal> option supresses error messages, so you can use
|
|
the exit status of the program to detect if a key exists or not (for
|
|
example).</para>
|
|
|
|
<para>The <literal>-w</literal> option allows you to access the 64 bit view
|
|
of the registry. Several subkeys exist in a 32 bit and a 64 bit version
|
|
when running on Windows 64. Since Cygwin is running in 32 bit mode, it
|
|
only has access to the 32 bit view of these registry keys. When using the
|
|
<literal>-w</literal> switch, the 64 bit view is used and
|
|
<command>regtool</command> can access the entire registry. This option is
|
|
simply ignored when running on 32 bit Windows versions. </para>
|
|
|
|
<para>The <literal>-W</literal> option allows you to access the 32 bit view
|
|
on the registry. The purpose of this option is mainly for symmetry. It
|
|
permits creation of OS agnostic scripts which would also work in a
|
|
hypothetical 64 bit version of Cygwin.</para>
|
|
|
|
<para>You must provide <command>regtool</command> with an
|
|
<emphasis>action</emphasis> following options (if any). Currently, the
|
|
action must be <literal>add</literal>, <literal>set</literal>,
|
|
<literal>check</literal>, <literal>get</literal>,
|
|
<literal>list</literal>, <literal>remove</literal>,
|
|
<literal>set</literal>, or <literal>unset</literal>. </para>
|
|
|
|
<para>The <literal>add</literal> action adds a new key. The
|
|
<literal>check</literal> action checks to see if a key exists (the exit
|
|
code of the program is zero if it does, nonzero if it does not). The
|
|
<literal>get</literal> action gets the value of a key, and prints it (and
|
|
nothing else) to stdout. Note: if the value doesn't exist, an error
|
|
message is printed and the program returns a non-zero exit code. If you
|
|
give <literal>-q</literal>, it doesn't print the message but does return
|
|
the non-zero exit code.</para>
|
|
|
|
<para> The <literal>list</literal> action lists the subkeys and values
|
|
belonging to the given key. With <literal>list</literal>, the
|
|
<literal>-k</literal> option instructs <command>regtool</command> to
|
|
print only KEYs, and the <literal>-l</literal> option to print only
|
|
VALUEs. The <literal>-p</literal> option postfixes a
|
|
<literal>'/'</literal> to each KEY, but leave VALUEs with no postfix. The
|
|
<literal>remove</literal> action removes a key. Note that you may need to
|
|
remove everything in the key before you may remove it, but don't rely on
|
|
this stopping you from accidentally removing too much. </para>
|
|
|
|
<para>The <literal>get</literal> action prints a value within a key. With
|
|
the <literal>-b</literal> option, data is printed as hex bytes.
|
|
<literal>-n</literal> allows to print the data as a typeless stream of
|
|
bytes. Integer values (REG_DWORD, REG_QWORD) are usually printed as
|
|
decimal values. The <literal>-x</literal> option allows to print the
|
|
numbers as hexadecimal values.</para>
|
|
|
|
<para>The <literal>set</literal> action sets a value within a key.
|
|
<literal>-b</literal> means it's binary data (REG_BINARY). The binary
|
|
values are specified as hex bytes in the argument list. If the argument
|
|
is <literal>'-'</literal>, binary data is read from stdin instead.
|
|
<literal>-d</literal> or <literal>-i</literal> means the value is a 32
|
|
bit integer value (REG_DWORD). <literal>-D</literal> means the value is a
|
|
32 bit integer value in Big Endian representation (REG_DWORD_BIG_ENDIAN).
|
|
<literal>-Q</literal> means the value is a 64 bit integer value
|
|
(REG_QWORD). <literal>-s</literal> means the value is a string (REG_SZ).
|
|
<literal>-e</literal> means it's an expanding string (REG_EXPAND_SZ) that
|
|
contains embedded environment variables. <literal>-m</literal> means it's
|
|
a multi-string (REG_MULTI_SZ). If you don't specify one of these,
|
|
<command>regtool</command> tries to guess the type based on the value you
|
|
give. If it looks like a number, it's a DWORD, unless it's value doesn't
|
|
fit into 32 bit, in which case it's a QWORD. If it starts with a percent,
|
|
it's an expanding string. If you give multiple values, it's a
|
|
multi-string. Else, it's a regular string.</para>
|
|
|
|
<para>The <literal>unset</literal> action removes a value from a
|
|
key.</para>
|
|
|
|
<para>The <literal>load</literal> action adds a new subkey and loads the
|
|
contents of a registry hive into it. The parent key must be
|
|
HKEY_LOCAL_MACHINE or HKEY_USERS. The <literal>unload</literal> action
|
|
unloads the file and removes the subkey. </para>
|
|
|
|
<para>The <literal>save</literal> action saves a subkey into a registry
|
|
hive. </para>
|
|
|
|
<para> By default, the last "\" or "/" is assumed to be the separator
|
|
between the key and the value. You can use the <literal>-K</literal>
|
|
option to provide an alternate key/value separator character. </para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="setfacl">
|
|
<title>setfacl</title>
|
|
|
|
<screen>
|
|
Usage: setfacl [-r] {-f ACL_FILE | -s acl_entries} FILE...
|
|
setfacl [-r] {-b|[-d acl_entries] [-m acl_entries]} FILE...
|
|
|
|
|
|
Modify file and directory access control lists (ACLs)
|
|
|
|
-b, --remove-all remove all extended ACL entries
|
|
-d, --delete delete one or more specified ACL entries
|
|
-f, --file set ACL entries for FILE to ACL entries read
|
|
from a ACL_FILE
|
|
-m, --modify modify one or more specified ACL entries
|
|
-r, --replace replace mask entry with maximum permissions
|
|
needed for the file group class
|
|
-s, --substitute substitute specified ACL entries for the
|
|
ACL of FILE
|
|
-h, --help output usage information and exit
|
|
-V, --version output version information and exit
|
|
|
|
At least one of (-b, -d, -f, -m, -s) must be specified
|
|
</screen>
|
|
|
|
<para> For each file given as parameter, <command>setfacl</command> will
|
|
either replace its complete ACL (<literal>-s</literal>,
|
|
<literal>-f</literal>), or it will add, modify, or delete ACL entries.
|
|
For more information on Cygwin and Windows ACLs, see see <xref
|
|
linkend="ntsec"/> in the Cygwin User's Guide. </para>
|
|
|
|
<para> Acl_entries are one or more comma-separated ACL entries from the
|
|
following list:
|
|
<screen>
|
|
u[ser]::perm
|
|
u[ser]:uid:perm
|
|
g[roup]::perm
|
|
g[roup]:gid:perm
|
|
m[ask]::perm
|
|
o[ther]::perm
|
|
</screen>
|
|
Default entries are like the above with the additional default
|
|
identifier. For example:
|
|
<screen>
|
|
d[efault]:u[ser]:uid:perm
|
|
</screen> </para>
|
|
|
|
<para> <emphasis>perm</emphasis> is either a 3-char permissions string in
|
|
the form "rwx" with the character <literal>'-'</literal> for no
|
|
permission or it is the octal representation of the permissions, a value
|
|
from 0 (equivalent to "---") to 7 ("rwx"). <emphasis>uid</emphasis> is a
|
|
user name or a numerical uid. <emphasis>gid</emphasis> is a group name or
|
|
a numerical gid. </para>
|
|
|
|
<para> The following options are supported: </para>
|
|
|
|
<para> <literal>-b</literal> Remove all extended ACL entries. The base
|
|
ACL entries of the owner, group and others are retained.</para>
|
|
|
|
<para> <literal>-d</literal> Delete one or more specified entries from the
|
|
file's ACL. The owner, group and others entries must not be deleted.
|
|
Acl_entries to be deleted should be specified without permissions, as in
|
|
the following list:
|
|
<screen>
|
|
u[ser]:uid[:]
|
|
g[roup]:gid[:]
|
|
m[ask][:]
|
|
d[efault]:u[ser][:uid]
|
|
d[efault]:g[roup][:gid]
|
|
d[efault]:m[ask][:]
|
|
d[efault]:o[ther][:]
|
|
</screen> </para>
|
|
|
|
<para> <literal>-f</literal> Take the Acl_entries from ACL_FILE one per
|
|
line. Whitespace characters are ignored, and the character "#" may be
|
|
used to start a comment. The special filename "-" indicates reading from
|
|
stdin. Note that you can use this with <command>getfacl</command> and
|
|
<command>setfacl</command> to copy ACLs from one file to another:
|
|
<screen>
|
|
$ getfacl source_file | setfacl -f - target_file
|
|
</screen> </para>
|
|
|
|
<para> Required entries are: one user entry for the owner of the file, one
|
|
group entry for the group of the file, and one other entry. </para>
|
|
|
|
<para> If additional user and group entries are given: a mask entry for the
|
|
file group class of the file, and no duplicate user or group entries with
|
|
the same uid/gid. </para>
|
|
|
|
<para> If it is a directory: one default user entry for the owner of the
|
|
file, one default group entry for the group of the file, one default mask
|
|
entry for the file group class, and one default other entry. </para>
|
|
|
|
<para> <literal>-m</literal> Add or modify one or more specified ACL
|
|
entries. Acl_entries is a comma-separated list of entries from the same
|
|
list as above. </para>
|
|
|
|
<para> <literal>-r</literal> Causes the permissions specified in the mask
|
|
entry to be ignored and replaced by the maximum permissions needed for
|
|
the file group class. </para>
|
|
|
|
<para> <literal>-s</literal> Like <literal>-f</literal>, but substitute the
|
|
file's ACL with Acl_entries specified in a comma-separated list on the
|
|
command line. </para>
|
|
|
|
<para> While the <literal>-d</literal> and <literal>-m</literal> options
|
|
may be used in the same command, the <literal>-f</literal> and
|
|
<literal>-s</literal> options may be used only exclusively. </para>
|
|
|
|
<para> Directories may contain default ACL entries. Files created in a
|
|
directory that contains default ACL entries will have permissions
|
|
according to the combination of the current umask, the explicit
|
|
permissions requested and the default ACL entries </para>
|
|
</sect2>
|
|
|
|
<sect2 id="setmetamode">
|
|
<title>setmetamode</title>
|
|
|
|
<screen>
|
|
Usage: setmetamode [metabit|escprefix]
|
|
|
|
Get or set keyboard meta mode
|
|
|
|
Without argument, it shows the current meta key mode.
|
|
metabit|meta|bit The meta key sets the top bit of the character.
|
|
escprefix|esc|prefix The meta key sends an escape prefix.
|
|
|
|
Other options:
|
|
|
|
-h, --help This text
|
|
-V, --version Print program version and exit
|
|
</screen>
|
|
|
|
<para><command>setmetamode</command> can be used to determine and set the
|
|
key code sent by the meta (aka <literal>Alt</literal>) key.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="ssp">
|
|
<title>ssp</title>
|
|
|
|
<screen>
|
|
Usage: ssp [options] low_pc high_pc command...
|
|
|
|
Single-step profile COMMAND
|
|
|
|
-c, --console-trace trace every EIP value to the console. *Lots* slower.
|
|
-d, --disable disable single-stepping by default; use
|
|
OutputDebugString ("ssp on") to enable stepping
|
|
-e, --enable enable single-stepping by default; use
|
|
OutputDebugString ("ssp off") to disable stepping
|
|
-h, --help output usage information and exit
|
|
-l, --dll enable dll profiling. A chart of relative DLL usage
|
|
is produced after the run.
|
|
-s, --sub-threads trace sub-threads too. Dangerous if you have
|
|
race conditions.
|
|
-t, --trace-eip trace every EIP value to a file TRACE.SSP. This
|
|
gets big *fast*.
|
|
-v, --verbose output verbose messages about debug events.
|
|
-V, --version output version information and exit
|
|
|
|
Example: ssp 0x401000 0x403000 hello.exe
|
|
</screen>
|
|
|
|
<para> SSP - The Single Step Profiler </para>
|
|
|
|
<para> Original Author: DJ Delorie </para>
|
|
|
|
<para> The SSP is a program that uses the Win32 debug API to run a program
|
|
one ASM instruction at a time. It records the location of each
|
|
instruction used, how many times that instruction is used, and all
|
|
function calls. The results are saved in a format that is usable by the
|
|
profiling program <command>gprof</command>, although
|
|
<command>gprof</command> will claim the values are seconds, they really
|
|
are instruction counts. More on that later. </para>
|
|
|
|
<para> Because the SSP was originally designed to profile the Cygwin DLL,
|
|
it does not automatically select a block of code to report statistics on.
|
|
You must specify the range of memory addresses to keep track of manually,
|
|
but it's not hard to figure out what to specify. Use the "objdump"
|
|
program to determine the bounds of the target's ".text" section. Let's
|
|
say we're profiling cygwin1.dll. Make sure you've built it with debug
|
|
symbols (else <command>gprof</command> won't run) and run objdump like
|
|
this: <screen>
|
|
$ objdump -h cygwin1.dll
|
|
</screen> It will print a report
|
|
like this:
|
|
<screen>
|
|
cygwin1.dll: file format pei-i386
|
|
|
|
Sections:
|
|
Idx Name Size VMA LMA File off Algn
|
|
0 .text 0007ea00 61001000 61001000 00000400 2**2
|
|
CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
|
|
1 .data 00008000 61080000 61080000 0007ee00 2**2
|
|
CONTENTS, ALLOC, LOAD, DATA
|
|
. . .
|
|
</screen> </para>
|
|
|
|
<para> The only information we're concerned with are the VMA of the .text
|
|
section and the VMA of the section after it (sections are usually
|
|
contiguous; you can also add the Size to the VMA to get the end address).
|
|
In this case, the VMA is 0x61001000 and the ending address is either
|
|
0x61080000 (start of .data method) or 0x0x6107fa00 (VMA+Size method). </para>
|
|
|
|
<para> There are two basic ways to use SSP - either profiling a whole
|
|
program, or selectively profiling parts of the program. </para>
|
|
|
|
<para> To profile a whole program, just run <command>ssp</command> without
|
|
options. By default, it will step the whole program. Here's a simple
|
|
example, using the numbers above:
|
|
<screen>
|
|
$ ssp 0x61001000 0x61080000 hello.exe
|
|
</screen> This will step
|
|
the whole program. It will take at least 8 minutes on a PII/300 (yes,
|
|
really). When it's done, it will create a file called "gmon.out". You can
|
|
turn this data file into a readable report with <command>gprof</command>:
|
|
<screen>
|
|
$ gprof -b cygwin1.dll
|
|
</screen> The "-b" means 'skip the help
|
|
pages'. You can omit this until you're familiar with the report layout.
|
|
The <command>gprof</command> documentation explains a lot about this
|
|
report, but <command>ssp</command> changes a few things. For example, the
|
|
first part of the report reports the amount of time spent in each
|
|
function, like this:
|
|
<screen>
|
|
Each sample counts as 0.01 seconds.
|
|
% cumulative self self total
|
|
time seconds seconds calls ms/call ms/call name
|
|
10.02 231.22 72.43 46 1574.57 1574.57 strcspn
|
|
7.95 288.70 57.48 130 442.15 442.15 strncasematch
|
|
</screen>
|
|
The "seconds" columns are really CPU opcodes, 1/100 second per opcode.
|
|
So, "231.22" above means 23,122 opcodes. The ms/call values are 10x too
|
|
big; 1574.57 means 157.457 opcodes per call. Similar adjustments need to
|
|
be made for the "self" and "children" columns in the second part of the
|
|
report. </para>
|
|
|
|
<para> OK, so now we've got a huge report that took a long time to
|
|
generate, and we've identified a spot we want to work on optimizing.
|
|
Let's say it's the time() function. We can use SSP to selectively profile
|
|
this function by using OutputDebugString() to control SSP from within the
|
|
program. Here's a sample program:
|
|
<screen>
|
|
#include <windows.h>
|
|
main()
|
|
{
|
|
time_t t;
|
|
OutputDebugString("ssp on");
|
|
time(&t);
|
|
OutputDebugString("ssp off");
|
|
}
|
|
</screen> </para>
|
|
|
|
<para> Then, add the <literal>-d</literal> option to ssp to default to
|
|
*disabling* profiling. The program will run at full speed until the first
|
|
OutputDebugString, then step until the second. You can then use
|
|
<command>gprof</command> (as usual) to see the performance profile for
|
|
just that portion of the program's execution. </para>
|
|
|
|
<para> There are many options to ssp. Since step-profiling makes your
|
|
program run about 1,000 times slower than normal, it's best to understand
|
|
all the options so that you can narrow down the parts of your program you
|
|
need to single-step. </para>
|
|
|
|
<para> <literal>-v</literal> - verbose. This prints messages about threads
|
|
starting and stopping, OutputDebugString calls, DLLs loading, etc. </para>
|
|
|
|
<para> <literal>-t</literal> and <literal>-c</literal> - tracing. With
|
|
<literal>-t</literal>, *every* step's address is written to the file
|
|
"trace.ssp". This can be used to help debug functions, since it can trace
|
|
multiple threads. Clever use of scripts can match addresses with
|
|
disassembled opcodes if needed. Warning: creates *huge* files, very
|
|
quickly. <literal>-c</literal> prints each address to the console, useful
|
|
for debugging key chunks of assembler. Use <literal>addr2line -C -f -s -e
|
|
foo.exe < trace.ssp > lines.ssp</literal> and then <literal>perl
|
|
cvttrace</literal> to convert to symbolic traces. </para>
|
|
|
|
<para> <literal>-s</literal> - subthreads. Usually, you only need to trace
|
|
the main thread, but sometimes you need to trace all threads, so this
|
|
enables that. It's also needed when you want to profile a function that
|
|
only a subthread calls. However, using OutputDebugString automatically
|
|
enables profiling on the thread that called it, not the main thread. </para>
|
|
|
|
<para> <literal>-l</literal> - dll profiling. Generates a pretty table of
|
|
how much time was spent in each dll the program used. No sense optimizing
|
|
a function in your program if most of the time is spent in the DLL. I
|
|
usually use the <literal>-v</literal>, <literal>-s</literal>, and
|
|
<literal>-l</literal> options:
|
|
<screen>
|
|
$ ssp <literal>-v</literal> <literal>-s</literal> <literal>-l</literal> <literal>-d</literal> 0x61001000 0x61080000 hello.exe
|
|
</screen>
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="strace">
|
|
<title>strace</title>
|
|
|
|
<screen>
|
|
Usage: strace.exe [OPTIONS] <command-line>
|
|
Usage: strace.exe [OPTIONS] -p <pid>
|
|
|
|
Trace system calls and signals
|
|
|
|
-b, --buffer-size=SIZE set size of output file buffer
|
|
-d, --no-delta don't display the delta-t microsecond timestamp
|
|
-f, --trace-children trace child processes (toggle - default true)
|
|
-h, --help output usage information and exit
|
|
-m, --mask=MASK set message filter mask
|
|
-n, --crack-error-numbers output descriptive text instead of error
|
|
numbers for Windows errors
|
|
-o, --output=FILENAME set output file to FILENAME
|
|
-p, --pid=n attach to executing program with cygwin pid n
|
|
-q, --quiet toggle "quiet" flag. Defaults to on if "-p",
|
|
off otherwise.
|
|
-S, --flush-period=PERIOD flush buffered strace output every PERIOD secs
|
|
-t, --timestamp use an absolute hh:mm:ss timestamp insted of
|
|
the default microsecond timestamp. Implies -d
|
|
-T, --toggle toggle tracing in a process already being
|
|
traced. Requires -p <pid>
|
|
-u, --usecs toggle printing of microseconds timestamp
|
|
-V, --version output version information and exit
|
|
-w, --new-window spawn program under test in a new window
|
|
|
|
MASK can be any combination of the following mnemonics and/or hex values
|
|
(0x is optional). Combine masks with '+' or ',' like so:
|
|
|
|
--mask=wm+system,malloc+0x00800
|
|
|
|
Mnemonic Hex Corresponding Def Description
|
|
=========================================================================
|
|
all 0x000001 (_STRACE_ALL) All strace messages.
|
|
flush 0x000002 (_STRACE_FLUSH) Flush output buffer after each message.
|
|
inherit 0x000004 (_STRACE_INHERIT) Children inherit mask from parent.
|
|
uhoh 0x000008 (_STRACE_UHOH) Unusual or weird phenomenon.
|
|
syscall 0x000010 (_STRACE_SYSCALL) System calls.
|
|
startup 0x000020 (_STRACE_STARTUP) argc/envp printout at startup.
|
|
debug 0x000040 (_STRACE_DEBUG) Info to help debugging.
|
|
paranoid 0x000080 (_STRACE_PARANOID) Paranoid info.
|
|
termios 0x000100 (_STRACE_TERMIOS) Info for debugging termios stuff.
|
|
select 0x000200 (_STRACE_SELECT) Info on ugly select internals.
|
|
wm 0x000400 (_STRACE_WM) Trace Windows msgs (enable _strace_wm).
|
|
sigp 0x000800 (_STRACE_SIGP) Trace signal and process handling.
|
|
minimal 0x001000 (_STRACE_MINIMAL) Very minimal strace output.
|
|
pthread 0x002000 (_STRACE_PTHREAD) Pthread calls.
|
|
exitdump 0x004000 (_STRACE_EXITDUMP) Dump strace cache on exit.
|
|
system 0x008000 (_STRACE_SYSTEM) Serious error; goes to console and log.
|
|
nomutex 0x010000 (_STRACE_NOMUTEX) Don't use mutex for synchronization.
|
|
malloc 0x020000 (_STRACE_MALLOC) Trace malloc calls.
|
|
thread 0x040000 (_STRACE_THREAD) Thread-locking calls.
|
|
special 0x100000 (_STRACE_SPECIAL) Special debugging printfs for
|
|
non-checked-in code
|
|
</screen>
|
|
|
|
<para>The <command>strace</command> program executes a program, and
|
|
optionally the children of the program, reporting any Cygwin DLL output
|
|
from the program(s) to stdout, or to a file with the
|
|
<literal>-o</literal> option. With the <literal>-w</literal> option, you
|
|
can start an strace session in a new window, for example:
|
|
<screen>
|
|
$ strace -o tracing_output -w sh -c 'while true; do echo "tracing..."; done' &
|
|
</screen>
|
|
This is particularly useful for <command>strace</command> sessions that
|
|
take a long time to complete. </para>
|
|
|
|
<para> Note that <command>strace</command> is a standalone Windows program
|
|
and so does not rely on the Cygwin DLL itself (you can verify this with
|
|
<command>cygcheck</command>). As a result it does not understand
|
|
symlinks. This program is mainly useful for debugging the Cygwin DLL
|
|
itself.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="tzset">
|
|
<title>tzset</title>
|
|
|
|
<screen>
|
|
Usage: tzset [OPTION]
|
|
|
|
Print POSIX-compatible timezone ID from current Windows timezone setting
|
|
|
|
Options:
|
|
-h, --help output usage information and exit.
|
|
-V, --version output version information and exit.
|
|
|
|
Use tzset to set your TZ variable. In POSIX-compatible shells like bash,
|
|
dash, mksh, or zsh:
|
|
|
|
export TZ=$(tzset)
|
|
|
|
In csh-compatible shells like tcsh:
|
|
|
|
setenv TZ `tzset`
|
|
</screen>
|
|
|
|
<para>The <command>tzset</command> tool reads the current timezone from
|
|
Windows and generates a POSIX-compatible timezone information for the TZ
|
|
environment variable from that information. That's all there is to it.
|
|
For the way how to use it, see the above usage information.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="umount">
|
|
<title>umount</title>
|
|
|
|
<screen>
|
|
Usage: umount.exe [OPTION] [<posixpath>]
|
|
|
|
Unmount filesystems
|
|
|
|
-h, --help output usage information and exit
|
|
-U, --remove-user-mounts remove all user mounts
|
|
-V, --version output version information and exit
|
|
</screen>
|
|
|
|
<para>The <command>umount</command> program removes mounts from the mount
|
|
table in the current session. If you specify a POSIX path that
|
|
corresponds to a current mount point, <command>umount</command> will
|
|
remove it from the current mount table. Note that you can only remove
|
|
user mount points. The <literal>-U</literal> flag may be used to specify
|
|
removing all user mount points from the current user session.</para>
|
|
|
|
<para>See <xref linkend="mount-table"/> for more information on the mount
|
|
table.</para>
|
|
</sect2>
|
|
|
|
</sect1>
|