neulab/tldr huggingface dataset:
AUTOSSH_MAXLIFETIME Sets the maximum number of seconds that the program should run. Once the number of seconds has been passed, the ssh child will be killed and the program will exit.
AUTOSSH_MAXSTART Specifies how many times ssh should be started. A negative number means no limit on the number of times ssh is started. The default value is -1.
AUTOSSH_MESSAGE Append message to echo message sent when testing connections.
AUTOSSH_NTSERVICE (Cygwin only.) When set to "yes" , autossh sets up to run as an NT service under cygrunsrv. This adds the -N flag for ssh if not already set, sets the log output to stdout, and changes the behaviour on ssh exit so that it will restart even on a normal exit.
AUTOSSH_PATH Specifies the path to the ssh executable, in case it is different than the path compiled in.
AUTOSSH_PIDFILE Write autossh pid to specified file.
AUTOSSH_POLL Specifies the connection poll time in seconds; default is 600 seconds.  Unless AUTOSSH_FIRST_POLL is used, the first poll time will set to match the poll time. If the poll time is less than twice the network timeouts (default 15 seconds) the network timeouts will be adjusted downward to 1/2 the poll time.
AUTOSSH_PORT Sets the connection monitoring port. Mostly in case ssh appropriates -M at some time. But because of this possible use, AUTOSSH_PORT overrides the -M flag. A value of 0 turns the monitoring function off.
There are two particular OpenSSH options that are useful when using autossh : ExitOnForwardFailure=yes on the client side to make sure forwardings have succeeded when autossh assumes the connection is setup properly. ClientAliveInterval on the server side to make sure the listening socket is closed on the server side if the connection closes on the client side.
autossh was written by Carson Harding.
ssh(1), ssh_config(5,) sshd_config(5,) ssh-add(1), ssh-agent(1), ssh-keygen(1), cygrunsrv(1).
cpufreq-info(1)                                                  cpufreq-info(1)
cpufreq-info - Utility to retrieve cpufreq kernel information
cpufreq-info [options]
A small tool which prints out cpufreq information helpful to developers and interested users.
-c --cpu <CPU> <CPU> number which information shall be determined about.
-e --debug Prints out debug information.
-f --freq Get frequency the CPU currently runs at, according to the cpufreq core.
-w --hwfreq Get frequency the CPU currently runs at, by reading it from hardware (only available to root).
-l --hwlimits Determine the minimum and maximum CPU frequency allowed.
-d --driver Determines the used cpufreq kernel driver.
-p --policy Gets the currently used cpufreq policy.
-g --governors Determines available cpufreq governors.
-a --related-cpus Determines which CPUs run at the same hardware frequency.
-a --affected-cpus Determines which CPUs need to have their frequency coordinated by software.
-s --stats Shows cpufreq statistics if available.
-y --latency Determines the maximum latency on CPU frequency changes.
-o --proc Prints out information like provided by the /proc/cpufreq interface in 2.4. and early 2.6. kernels.
-m --human human-readable output for the -f, -w, -s and -y parameters.
You can't specify more than one of the output specific options -o -e -a -g -p -d -l -w -f -y.
You also can't specify the -o option combined with the -c option.
cpufreq-set(1)
update-alternatives(8)           dpkg utilities           update-alternatives(8)
update-alternatives - maintain symbolic links determining default commands
update-alternatives [option...] command
update-alternatives creates, removes, maintains and displays information about the symbolic links comprising the Debian alternatives system.
It is possible for several programs fulfilling the same or similar functions to be installed on a single system at the same time.  For example, many systems have several text editors installed at once.  This gives choice to the users of a system, allowing each to use a different editor, if desired, but makes it difficult for a program to make a good choice for an editor to invoke if the user has not specified a particular preference.
Debian's alternatives system aims to solve this problem.  A generic name in the filesystem is shared by all files providing interchangeable functionality.  The alternatives system and the system administrator together determine which actual file is referenced by this generic name. For example, if the text editors ed(1) and nvi(1) are both installed on the system, the alternatives system will cause the generic name /usr/bin/editor to refer to /usr/bin/nvi by default. The system administrator can override this and cause it to refer to /usr/bin/ed instead, and the alternatives system will not alter this setting until explicitly requested to do so.
The generic name is not a direct symbolic link to the selected alternative.  Instead, it is a symbolic link to a name in the alternatives directory, which in turn is a symbolic link to the actual file referenced.  This is done so that the system administrator's changes can be confined within the /etc directory: the FHS (q.v.) gives reasons why this is a Good Thing.
When each package providing a file with a particular functionality is installed, changed or removed, update-alternatives is called to update information about that file in the alternatives system. update-alternatives is usually called from the postinst (configure) or prerm (remove and deconfigure) scripts in Debian packages.
It is often useful for a number of alternatives to be synchronized, so that they are changed as a group; for example, when several versions of the vi(1) editor are installed, the man page referenced by /usr/share/man/man1/vi.1 should correspond to the executable referenced by /usr/bin/vi.  update-alternatives handles this by means of master and slave links; when the master is changed, any associated slaves are changed too.  A master link and its associated slaves make up a link group.
Each link group is, at any given time, in one of two modes: automatic or manual.  When a group is in automatic mode, the alternatives system will automatically decide, as packages are installed and removed, whether and how to update the links.  In manual mode, the alternatives system will retain the choice of the administrator and avoid changing the links (except when something is broken).
Link groups are in automatic mode when they are first introduced to the system.  If the system administrator makes changes to the system's automatic settings, this will be noticed the next time update-alternatives is run on the changed link's group, and the group will automatically be switched to manual mode.
Each alternative has a priority associated with it.  When a link group is in automatic mode, the alternatives pointed to by members of the group will be those which have the highest priority.
When using the --config option, update-alternatives will list all of the choices for the link group of which given name is the master alternative name. The current choice is marked with a '*'.  You will then be prompted for your choice regarding this link group.  Depending on the choice made, the link group might no longer be in auto mode. You will need to use the --auto option in order to return to the automatic mode (or you can rerun --config and select the entry marked as automatic).
If you want to configure non-interactively you can use the --set option instead (see below).
Different packages providing the same file need to do so cooperatively. In other words, the usage of update-alternatives is mandatory for all involved packages in such case. It is not possible to override some file in a package that does not employ the update-alternatives mechanism.
Since the activities of update-alternatives are quite involved, some specific terms will help to explain its operation.
generic name (or alternative link) A name, like /usr/bin/editor, which refers, via the alternatives system, to one of a number of files of similar function.
alternative name The name of a symbolic link in the alternatives directory.
alternative (or alternative path) The name of a specific file in the filesystem, which may be made accessible via a generic name using the alternatives system.
alternatives directory A directory, by default /etc/alternatives, containing the symlinks.
administrative directory A directory, by default /var/lib/dpkg/alternatives, containing update-alternatives' state information.
link group A set of related symlinks, intended to be updated as a group.
master link The alternative link in a link group which determines how the other links in the group are configured.
slave link An alternative link in a link group which is controlled by the setting of the master link.
automatic mode When a link group is in automatic mode, the alternatives system ensures that the links in the group point to the highest priority alternative appropriate for the group.
manual mode When a link group is in manual mode, the alternatives system will not make any changes to the system administrator's settings.
--install link name path priority [--slave link name path]... Add a group of alternatives to the system.  link is the generic name for the master link, name is the name of its symlink in the alternatives directory, and path is the alternative being introduced for the master link.  The arguments after --slave are the generic name, symlink name in the alternatives directory and the alternative path for a slave link.  Zero or more --slave options, each followed by three arguments, may be specified. Note that the master alternative must exist or the call will fail. However if a slave alternative doesn't exist, the corresponding slave alternative link will simply not be installed (a warning will still be displayed). If some real file is installed where an alternative link has to be installed, it is kept unless --force is used.
If the alternative name specified exists already in the alternatives system's records, the information supplied will be added as a new set of alternatives for the group.  Otherwise, a new group, set to automatic mode, will be added with this information.  If the group is in automatic mode, and the newly added alternatives' priority is higher than any other installed alternatives for this group, the symlinks will be updated to point to the newly added alternatives.
--set name path Set the program path as alternative for name.  This is equivalent to --config but is non-interactive and thus scriptable.
--remove name path Remove an alternative and all of its associated slave links.  name is a name in the alternatives directory, and path is an absolute filename to which name could be linked. If name is indeed linked to path, name will be updated to point to another appropriate alternative (and the group is put back in automatic mode), or removed if there is no such alternative left.  Associated slave links will be updated or removed, correspondingly.  If the link is not currently pointing to path, no links are changed; only the information about the alternative is removed.
--remove-all name Remove all alternatives and all of their associated slave links. name is a name in the alternatives directory.
--all  Call --config on all alternatives. It can be usefully combined with --skip-auto to review and configure all alternatives which are not configured in automatic mode. Broken alternatives are also displayed.  Thus a simple way to fix all broken alternatives is to call yes '' | update-alternatives --force --all.
--auto name Switch the link group behind the alternative for name to automatic mode.  In the process, the master symlink and its slaves are updated to point to the highest priority installed alternatives.
--display name Display information about the link group.  Information displayed includes the group's mode (auto or manual), which alternative the master link currently points to, what other alternatives are available (and their corresponding slave alternatives), and the highest priority alternative currently installed.
--get-selections List all master alternative names (those controlling a link group) and their status. Each line contains up to 3 fields (separated by one or more spaces). The first field is the alternative name, the second one is the status (either "auto" or "manual"), and the last one contains the current choice in the alternative (beware: it's a filename and thus might contain spaces).
--set-selections Read configuration of alternatives on standard input in the format generated by update-alternatives --get-selections and reconfigure them accordingly.
--query name Display information about the link group like --display does, but in a machine parseable way (see section QUERY FORMAT below).
--list name Display all targets of the link group.
--config name Show available alternatives for a link group and allow the user to interactively select which one to use. The link group is updated.
--help Show the usage message and exit.
--altdir directory Specifies the alternatives directory, when this is to be different from the default.
--admindir directory Specifies the administrative directory, when this is to be different from the default.
--log file Specifies the log file, when this is to be different from the default (/var/log/alternatives.log).
--force Let update-alternatives replace or drop any real file that is installed where an alternative link has to be installed or removed.
--skip-auto Skip configuration prompt for alternatives which are properly configured in automatic mode. This option is only relevant with --config or --all.
--verbose Generate more comments about what update-alternatives is doing.
--quiet Don't generate any comments unless errors occur.
0      The requested action was successfully performed.
2      Problems were encountered whilst parsing the command line or performing the action.
DPKG_ADMINDIR If set and the --admindir option has not been specified, it will be used as the base administrative directory.
/etc/alternatives/ The default alternatives directory.  Can be overridden by the --altdir option.
/var/lib/dpkg/alternatives/ The default administration directory.  Can be overridden by the --admindir option.
The update-alternatives --query format is using an RFC822-like flat format. It's made of n + 1 blocks where n is the number of alternatives available in the queried link group. The first block contains the following fields:
Name: name The alternative name in the alternative directory.
Link: link The generic name of the alternative.
Slaves: list-of-slaves When this field is present, the next lines hold all slave links associated to the master link of the alternative. There is one slave per line. Each line contains one space, the generic name of the slave alternative, another space, and the path to the slave link.
Status: status The status of the alternative (auto or manual).
Best: best-choice The path of the best alternative for this link group. Not present if there is no alternatives available.
Value: currently-selected-alternative The path of the currently selected alternative. It can also take the magic value none. It is used if the link doesn't exist.
The other blocks describe the available alternatives in the queried link group:
Alternative: path-of-this-alternative Path to this block's alternative.
Priority: priority-value Value of the priority of this alternative.
Slaves: list-of-slaves When this field is present, the next lines hold all slave alternatives associated to the master link of the alternative. There is one slave per line. Each line contains one space, the generic name of the slave alternative, another space, and the path to the slave alternative.
Example $ update-alternatives --query editor Name: editor Link: /usr/bin/editor Slaves: editor.1.gz /usr/share/man/man1/editor.1.gz editor.fr.1.gz /usr/share/man/fr/man1/editor.1.gz editor.it.1.gz /usr/share/man/it/man1/editor.1.gz editor.pl.1.gz /usr/share/man/pl/man1/editor.1.gz editor.ru.1.gz /usr/share/man/ru/man1/editor.1.gz Status: auto Best: /usr/bin/vim.basic Value: /usr/bin/vim.basic
Alternative: /bin/ed Priority: -100 Slaves: editor.1.gz /usr/share/man/man1/ed.1.gz
Alternative: /usr/bin/vim.basic Priority: 50 Slaves: editor.1.gz /usr/share/man/man1/vim.1.gz editor.fr.1.gz /usr/share/man/fr/man1/vim.1.gz editor.it.1.gz /usr/share/man/it/man1/vim.1.gz editor.pl.1.gz /usr/share/man/pl/man1/vim.1.gz editor.ru.1.gz /usr/share/man/ru/man1/vim.1.gz
With --verbose update-alternatives chatters incessantly about its activities on its standard output channel.  If problems occur, update-alternatives outputs error messages on its standard error channel and returns an exit status of 2.  These diagnostics should be self- explanatory; if you do not find them so, please report this as a bug.
There are several packages which provide a text editor compatible with vi, for example nvi and vim. Which one is used is controlled by the link group vi, which includes links for the program itself and the associated manpage.
To display the available packages which provide vi and the current setting for it, use the --display action:
update-alternatives --display vi
To choose a particular vi implementation, use this command as root and then select a number from the list:
update-alternatives --config vi
To go back to having the vi implementation chosen automatically, do this as root:
update-alternatives --auto vi
ln(1), FHS, the Filesystem Hierarchy Standard.
LINK(1)                           User Commands                          LINK(1)
link - call the link function to create a link to a file
link FILE1 FILE2 link OPTION
Call the link function to create a link named FILE2 to an existing FILE1.
link(2)
Full documentation <https://www.gnu.org/software/coreutils/link> or available locally via: info '(coreutils) link invocation'
ocamlfind(1)                 General Commands Manual                ocamlfind(1)
ocamlfind - [Command-line interface of the Package manager]
ocamlfind query [-help | other options] package_name ... or: ocamlfind ocamlc [-help | other options] file ... or: ocamlfind ocamlcp [-help | other options] file ... or: ocamlfind ocamlmktop [-help | other options] file ... or: ocamlfind ocamlopt [-help | other options] file ... or: ocamlfind ocamldoc [-help | other options] file ... or: ocamlfind ocamldep [-help | other options] file ... or: ocamlfind ocamlmklib [-help | other options] file ... or: ocamlfind ocamlbrowser [-help | other options] or: ocamlfind install [-help | other options] package_name file ... or: ocamlfind remove [-help | other options] package_name or: ocamlfind lint META or: ocamlfind list [-describe] or: ocamlfind printppx [-help | other options] package_name ... or: ocamlfind printconf [ variable ] or: ocamlfind package/command arg ...
Optional toolchain selection by: ocamlfind -toolchain name ...
THE 'query' SUBCOMMAND Synopsis ocamlfind query [ -predicates p  | -format f | -long-format | -l | -i-format | -l-format | -a-format | -o-format | -p-format | -prefix p | -separator s | -suffix s | -pp | -descendants | -d | -recursive  | -r -qe | -qo] package ...
Description This command looks packages up, sorts them optionally, and prints attributes of them. If the option -recursive (short: -r) is not specified, exactly the packages given on the command line are looked up; if -recursive is present, the packages and all their ancestors, or if -descendants (short: -d) is present, too, all their descendants are printed.
Package lookup and the selection of the attributes of the packages can be modified by specifying predicates; without a -predicates option the empty set of predicates is used. Note that even the lookup is influenced by the set of actual predicates as the "requires" variables may be conditional.
What is printed about a package depends on the specified format; there are a number of options that modify the format. Some formats denote sets of values (such as -format %a), in which case multiple output records are printed for every package. (It is even possible to specify formats denoting the Cartesian product of sets, such as -format %a%o, but this does not make sense.) Before the first output record the prefix is printed, and the suffix after the last record. Between two records the separator is printed.
Options -predicates p
Sets the set of actual predicates. The argument  p is a list of predicate names separated  by commas and/or whitespace. If multiple -predicates options are  given, the union of all specified sets is effectively used.
-format f
Sets the format to the string  f. Characters preceded by a percent sign  are interpreted as placeholders; all other characters mean themselves. The defined placeholders are listed below.  The default format is "%d".
-long-format or -l
Sets the format such that all relevant variables are printed.
-i-format
Same as -format "-I %d", i.e. directory options for ocamlc are printed.
-l-format
Same as -format "-ccopt -L%d", i.e. directory options for the linker backend are printed.
-a-format
Same as -format "%+a", i.e. archive file names are printed.
-o-format
Same as -format "%o", i.e. linker options are printed.
-p-format
Same as -format "%p", i.e. package names are printed.
-prefix p
Sets the prefix that is printed before the first output record  to the given string. The default prefix is the empty string.
-suffix s
Sets the suffix that is printed after the last output record  to the given string. The default suffix is the empty string.
-separator s
Sets the separator that is printed between output records to  the given string. The default separator is a linefeed character.
-recursive or -r
Not only the packages given on the command line are queried  but also all ancestors or descendants. If the option -descendants is specified, too, the descendants are printed, otherwise the ancestors. The packages are topologically sorted.
-descendants -d
Instead of the ancestors the descendants of the  given packages are queried. This option implies -recursive.
-pp
Query preprocessor packages (camlp4 syntax extensions). Normally it is not needed to set -predicates, except you need the archives (then add -predicates byte). This option implies -recursive.
-qe
Do not print most errors to stderr, just set the exit code
-qo
Do not print the regular output.
Placeholders meaningful in the -format option %%
Replaced by a single percent sign
Replaced by the package name
Replaced by the package directory
Replaced by the path to the META file (new since findlib-1.6)
Replaced by the package description
%v
Replaced by the version string
%a
Replaced by the archive filename. If there is more  than one archive, a separate output record is printed for every archive.
%+a
Like %a, but the filenames are converted to absolute  paths ("+" and "@" notations are resolved)
%A
Replaced by the list of archive filenames.
%+A
Like %A, but the filenames are converted to absolute  paths ("+" and "@" notations are resolved)
Replaced by one linker option. If there is more than  one option, a separate output record is printed for every option.
%O
Replaced by the list of linker options.
%(property)
Replaced by the value of the property named in parentheses, or the empty string if not defined.
THE SUBCOMMANDS 'ocamlc', 'ocamlcp', 'ocamlopt', and 'ocamlmktop' Synopsis ocamlfind ( ocamlc | ocamlcp | ocamlopt | ocamlmktop ) [ -package package-name-list | -linkpkg | -predicates pred-name-list | -dontlink package-name-list | -syntax pred-name-list | -ppopt camlp4-arg | -ppxopt package,arg | -dllpath-pkg package-name-list | -dllpath-all | -passopt arg | -passrest arg... | -only-show | standard-option ] file ...
Description These subcommands are drivers for the compilers with the same names, i.e. "ocamlfind ocamlc" is a driver for "ocamlc", and so on. The subcommands understand all documented options of the compilers (here called standard- options), but also a few more options. If these subcommands are invoked only with standard options, they behave as if the underlying compiler had been called directly. The extra options modify this.
Internally, these subcommands transform the given list of options and file arguments into an invocation of the driven compiler. This transformation only adds options and files, and the relative order of the options and files passed directly is unchanged.
If there are -package options, additional directory search specifiers will be included ("-I", and "-ccopt -I"), such that files of all named packages and all ancestors can be found.
The -linkpkg option causes that the packages listed in the -package options and all necessary ancestors are linked in. This means that the archive files implementing the packages are inserted into the list of file arguments.
As the package database is queried a set of predicates is needed. Most predicates are set automatically, see below, but additional predicates can be given by a -predicates option.
If there is a -syntax option, the drivers assume that a preprocessor is to be used. In this case, the preprocessor command is built first in a preprocessor stage, and this command is passed to the compiler using the -pp option. The set of predicates in the preprocessor stage is different from the set in the compiler/linker stage.
Options for compiling and linking Here, only the additional options not interpreted by the compiler but by the driver itself, and options with additional effects are explained. Some options are only meaningful for the preprocessor call, and are explained below.
-package package-name-list
Adds the listed package names to the set of included  packages. The package names may be separated by commas and/or  whitespace. In the transformed command, for every package of the set  of included packages and for any ancestor a directory search option is inserted after the already given options. This means that  "-I" and "-ccopt -I" options are added for every package directory.
-linkpkg
Causes that in the transformed command all archives  of the packages specified by -packages and all their ancestors are  added to the file arguments. More precisely, these archives are inserted before the first given file argument. Furthermore, "-ccopt  -L" options for all package directories, and the linker options of  the selected packages are added, too. Note that the archives are  inserted in topological order while the linker options are added in  reverse toplogical order.
-predicates pred-name-list
Adds the given predicates to the set of actual  predicates. The predicates must be separated by commas and/or  whitespace.
-dontlink package-name-list
This option modifies the behaviour of  -linkpkg. Packages specified here and all ancestors are not linked  in. Again the packages are separated by commas and/or whitespace.
-dllpath-pkg package-name-list
For these packages -dllpath options  are added to the compiler command. This may be useful when the ld.conf  file is not properly configured.
-dllpath-all
For all linked packages -dllpath options  are added to the compiler command. This may be useful when the ld.conf  file is not properly configured.
-passopt arg
The argument arg is  passed directly to the underlying compiler. This is needed to  specify undocumented compiler options.
-passrest arg...
All following arguments arg... are  passed directly to the underlying compiler. This is needed to  specify undocumented compiler options.
-only-show
Only prints the constructed command (ocamlc/ocamlopt) to  stdout, but does not execute the command. (This is for the unlikely event that you need a wrapper around ocamlfind.)
This standard option is interpreted by the driver, too.
-thread
This standard option causes that the predicate "mt"  is added to the set of actual predicates. If POSIX threads are available,  the predicate "mt_posix" is selected, too. If only VM threads are available, the predicate "mt_vm" is included into the set, and the compiler switch is changed into -vmthread.
Note that the presence of the "mt" predicate triggers special fixup of the dependency graph (see below).
-vmthread
This standard option causes that the predicates "mt"  and "mt_vm" are added to the set of actual predicates.
This standard option of "ocamlopt" causes that the  predicate "gprof" is added to the set of actual predicates.
Options for preprocessing The options relevant for the preprocessor are the following:
These packages are considered while looking up the  preprocessor arguments. (It does not cause problems that the same  -package option is used for this purpose, because the set of predicates  is different.) It is recommended to mention at least camlp4  here if the preprocessor is going to be used.
-syntax pred-name-list
These predicates are assumed to be true in addition  to the standard preprocessor predicates. See below for a list.
-ppopt camlp4-arg
This argument is passed to the camlp4 call.
-ppxopt package,arg
Add arg to the ppx  preprocessor invocation specified via the "ppx" property in  the META file of package.
Predicates for compiling and linking byte
The "byte" predicate means that one of the bytecode compilers is used. It is automatically included into the predicate set if the "ocamlc", "ocamlcp", or "ocamlmktop" compiler is used.
The "native" predicate means that the native compiler is used. It is automatically included into the predicate set if the "ocamlopt" compiler is used.
toploop
The "toploop" predicate means that the toploop is available in the linked program. This predicate is only set when the toploop is actually being executed, not when the toploop is created (this changed in version 1.0.4 of findlib).
create_toploop
This predicate means that a toploop is being created (using ocamlmktop).
The "mt" predicate means that the program is multi-threaded. It is automatically included into the predicate set if the -thread option is given.
mt_posix
The "mt_posix" predicate means that in the case "mt" is set, too, the POSIX libraries are used to implement threads. "mt_posix" is automatically included into the predicate set if the variable "type_of_threads" in the META description of the "threads" package has the value "posix". This is normally the case if "findlib" is configured for POSIX threads.
mt_vm
The "mt_vm" predicate means that in the case "mt" is set, too, the VM thread emulation is used to implement multi-threading.
The "gprof" predicate means that in the case "native" is set, too, the program is compiled for profiling. It is automatically included into the predicate set if "ocamlopt" is used and the -p option is in effect.
The "autolink" predicate means that ocamlc is able to perform automatic linking. It is automatically included into the predicate set if ocamlc knows automatic linking (from version 3.00), but it is not set if the -noautolink option is set.
This predicate is set if there is a -syntax  option. It is set both for the preprocessor and the compiler/linker stage,  and it can be used to find out whether the preprocessor is enabled or not.
Predicates for preprocessing preprocessor
This predicate is always set while looking up the  preprocessor arguments. It can be used to distinguish between the  preprocessor stage and the compiler/linker stage.
camlp4o
This is the reserved predicate for the standard O'Caml syntax.  It can be used in the -syntax predicate list.
camlp4r
This is the reserved predicate for the revised O'Caml syntax.  It can be used in the -syntax predicate list.
Special behaviour of 'ocamlmktop' As there is a special module Topfind that supports loading of packages in scripts, the "ocamlmktop" subcommand can add initialization code for this module. This extra code is linked into the executable if "findlib" is in the set of effectively linked packages.
Fixup of the dependency graph for multi-threading For a number of reasons the presence of the "mt" predicate triggers that (1) the package "threads" is added to the list of required packages and (2) the package "threads" becomes prerequisite of all other packages (except of itself and a few hardcoded exceptions). The effect is that the options -thread and -vmthread automatically select the "threads" package, and that "threads" is inserted at the right position in the package list.
Extended file naming At a number of places one can not only refer to files by absolute or relative path names, but also by extended names. These have two major forms: "+name" refers to the subdirectory name of the standard library directory, and "@name" refers to the package directory of the package name. Both forms can be continued by a path, e.g. "@netstring/netstring_top.cma".
You can use extended names: (1) With -I options, (2) as normal file arguments of the compiler, (3) in the  "archive" property of packages.
How to set the names of the compiler executables Normally, the O'Caml bytecode compiler can be called under the name ocamlc. However, this is not always true; sometimes a different name is chosen.
You can instruct ocamlfind to call executables with other names than ocamlc, ocamlopt, ocamlmktop, and ocamlcp. If present, the environment variable OCAMLFIND_COMMANDS is interpreted as a mapping from the standard names to the actual names of the executables. It must have the following format:
standardname1=actualname1 standardname2=actualname2 ...
Example: You may set OCAMLFIND_COMMANDS as follows:
OCAMLFIND_COMMANDS='ocamlc=ocamlc-3.00 ocamlopt=ocamlopt-3.00' export OCAMLFIND_COMMANDS
Alternatively, you can change the configuration file findlib.conf.
THE SUBCOMMAND 'ocamlmklib' Synopsis ocamlfind ocamlmklib [ -package package-name-list | -predicates pred-name-list | -dllpath-pkg package-name-list | -dllpath-all | -passopt arg | -passrest arg... | standard-option ] file ...
Description This is a wrapper around ocamlmklib, and creates library archives and DLLs. In addition to the standard options, one can use -package to add the search path of packages. Note that no predicates are set by default - the wrapper does not know whether this is about byte or native code linking.
This wrapper is mostly provided for completeness.
THE 'ocamldep' SUBCOMMAND Synopsis ocamlfind ocamldep [-package package-name-list | -syntax pred-name-list | -ppopt camlp4-arg | -passopt arg | -passrest arg... | -verbose | standard-option] file ...
Description This command is a driver for the tool ocamldep of the O'Caml distribution. This driver is only useful in conjunction with the preprocessor camlp4; otherwise it does not provide more functions than ocamldep itself.
Options Here, only the additional options not interpreted by ocamldep but by the driver itself, and options with additional effects are explained.
The packages named here are only used to look up the preprocessor options. The package camlp4 should be specified anyway, but further packages that add capabilities to the preprocessor can also be passed.
The predicates that are in effect during the look-up of the preprocessor options. At least, either camlp4o (selecting the normal syntax), or camlp4r (selecting the revised syntax) should be specified.
An option that is passed through to the camlp4 call.
An option that is passed through to the ocamldep call.
All further arguments are passed down to ocamldep  unprocessed
Displays the resulting ocamldep command (for debugging)
Example A typical way of using this driver:
ocamlfind ocamldep -package camlp4,xstrp4 -syntax camlp4r file1.ml file2.ml This command outputs the dependencies of file1.ml and file2.ml, although these modules make use of the syntax extensions provided by xstrp4 and are written in revised syntax.
THE 'ocamlbrowser' SUBCOMMAND Synopsis ocamlfind ocamlbrowser [-package package-name-list | -all | -passopt arg -passrest ]
Description This driver calls the ocamlbrowser with package options. With -package, the specified packages are included into the search path of the browser, and the modules of these packages become visible (in addition to the standard library). The option -all causes that all packages are selected that are managed by findlib.
As for other drivers, the options -passopt and -passrest can be used to pass arguments directly to the ocamlbrowser program.
THE SUBCOMMAND 'ocamldoc' Synopsis ocamlfind ocamldoc [ -package package-name-list | -predicates pred-name-list | -syntax pred-name-list | -ppopt camlp4-arg | standard-option ] file ...
Description This subcommand is a driver for ocamldoc. It undestands all options ocamldoc supports plus the mentioned findlib options. Basically, the -package options are translated into -I options, and the selected syntax options are translated into camlp4 options.
Adds the listed package names to the set of included  packages. The package names may be separated by commas and/or  whitespace. In the transformed command, for every package of the set  of included packages and for any ancestor a directory search option is inserted after the already given options. This means that  "-I" options are added for every package directory.
THE 'install' SUBCOMMAND Synopsis ocamlfind install [ -destdir directory ] [ -metadir directory ] [ -ldconf path ] [ -dont-add-directory-directive ] [ -patch-version string ] [ -patch-rmpkg name ] [ -patch-archives ] [ -dll ] [ -nodll ] [ -optional ] [ -add ] package_name file ...
Description This subcommand installs a new package either at the default location (see the variable destdir of findlib.conf), or in the directory specified by the -destdir option. This means that a new package directory is created and that the files on the command line are copied to this directory. It is required that a META file is one of the files copied to the target directory.
Note that package directories should be flat (no subdirectories). Existing packages are never overwritten.
It is possible to have a separate directory for all the META files. If you want that, you have either to set the variable metadir of findlib.conf, or to specify the -metadir option. In this case, the file called META is copied to the specified directory and renamed to META.p (where p is the package name), while all the other files are copied to the package directory as usual. Furthermore, the META file is modified such that the directory variable contains the path of the package directory.
The option -dont-add-directory-directive prevents the installer from adding a directory variable.
If there are files ending in the suffixes .so or .dll, the package directory will be added to the DLL configuration file ld.conf, such that the dynamic loader can find the DLL. The location of this file can be overriden by the -ldconf option. To turn this feature off, use "-ldconf ignore"; this causes that the ld.conf file is not modified.
However, if there is a stublibs directory in site-lib, the DLLs are not installed in the package directory, but in this directory that is shared by all packages that are installed at the same location. In this case, the configuration file ld.conf is not modified, so you do not need to say "-ldconf ignore" if you prefer this style of installation.
The options -dll and -nodll can be used to control exactly which files are considered as DLLs and which not. By default, the mentioned suffix rule is in effect: files ending in ".so" (Unix) or ".dll" (Windows) are DLLs. The switch -dll changes this, and all following files are considered as DLLs, regardless of their suffix. The switch  -nodll expresses that the following files are not DLLs, even if they have a DLL- like suffix. For example, in the following call the files f1 and f2 are handled by the suffix rule; f3 and f4 are DLLs anyway; and f5 and f6 are not DLLs:
ocamlfind install p f1 f2 -dll f3 f4 -nodll f5 f6
The switch -optional declares that all following files are optional, i.e. the command will not fail if files do not exist.
The -patch options may be used to change the contents of the META files while it is being installed. The option -patch-version changes the contents of the top-level "version" variable. The option -patch-rmpkg removes the given subpackage. The option -patch-archives is experimental, in particular it removes all non-existing files from "archive" variables, and even whole subpackages if the archives are missing.
The effect of -add is to add further files to an already installed packages.
THE 'remove' SUBCOMMAND Synopsis ocamlfind remove [ -destdir directory ] [ -metadir directory ] [ -ldconf path ] package_name
Description The package will removed if it is installed at the default location  (see the variable destdir of findlib.conf). If the package resides at a different location, it will not be removed by default; however, you can pass an alternate directory for packages by the -destdir option. (This must be the same directory as specified at installation time.)
Note that package directories should be flat (no subdirectories); this subcommand cannot remove deep package directories.
If you have a separate directory for META files, you must either configure this directory by the metadir variable of findlib.conf, or by specifying the -metadir option.
The command does not fail if the package and/or the META file cannot be located. You will get a warning only in this case.
If the package directory is mentioned in the ld.conf configuration file for DLLs, it will be tried to remove this entry from the file. The location of this file can be overriden by the -ldconf option. To turn this feature off, use "-ldconf ignore"; this causes that the ld.conf file is not modified.
If there is a stublibs directory, it is checked whether the package owns any of the files in this directory, and the owned files will be deleted.
THE 'list' SUBCOMMAND Synopsis ocamlfind list [-describe]
Description This command lists all packages in the search path. The option -describe outputs the package descriptions, too.
THE 'printppx' SUBCOMMAND Synopsis ocamlfind printppx [ -predicates pred-name-list ] [ -ppxopt package,arg ] package ...
Description This command prints the ppx preprocessor options as they would occur in an OCaml compiler invocation for the packages listed in the command. The output includes one "-ppx" option for each preprocessor. The possible options have the same meaning as for "ocamlfind ocamlc". The option "-predicates" adds assumed predicates and "-ppxopt package,arg" adds "arg" to the ppx invocation of package package.
The output of "ocamlfind printppx" will contain quotes """ for ppx commands that contain space-separated arguments. In this case $(ocamlfind printppx ...) won't work as naively expected, because many shells (including bash and dash) perform field splitting on the result of command substitutions without honoring quotes.
THE 'lint' SUBCOMMAND Synopsis ocamlfind lint file
Description Checks the META file, and reports possible problems.
THE 'printconf' SUBCOMMAND Synopsis ocamlfind printconf [ conf | path | destdir | metadir | metapath | stdlib | ldconf ]
Description This command prints the effective configuration after reading the configuration file, and after applying the various environment variables overriding settings. When called without arguments, the command prints all configuration options in a human-readable form. When called with an argument, only the value of the requested option is printed without explaining texts:
Prints the location of the configuration file findlib.conf
Prints the search path for packages. The members of the  path are separated by linefeeds.
Prints the location where package are installed and  removed by default.
metadir
Prints the location where META files are installed and  removed (if the alternative layout is used).
metapath
Prints the path where the META file is installed for a fictive package. The name of the package is marked with '%s' in the path. For instance, this command could output "/some/path/%s/META" or "/some/path/META.%s", depending on the layout.
Prints the location of the standard library.
ldconf
Prints the location of the ld.conf file
Synopsis ocamlfind pkg/cmd argument ...
Description This subcommand is useful to call programs that are installed in package directories. It looks up the directory for  pkg and calls the command named cmd in this directory. The remaining arguments are passed to this command.
argv(0) contains the absolute path to the command, and argv(1) and the following argv entries contain the arguments. The working directory is not changed.
Example: To call the program "x" that is installed in package "p", with arguments "y" and "z", run:
ocamlfind p/x y z
CONFIGURATION FILE, ENVIRONMENT VARIABLES The configuration file and environment variables are documented in the manual page for  findlib.conf.
Synopsis ocamlfind -toolchain name ...
Description The -toolchain option can be given before any other command, e.g.
ocamlfind -toolchain foo ocamlc -c file.ml compiles file.ml with toolchain "foo". By selecting toolchains one can switch to different command sets. For instance, the toolchain "foo" may consist of a patched ocamlc compiler.   See findlib.conf how to configure toolchains.
READ(3P)                    POSIX Programmer's Manual                   READ(3P)
pread, read — read from a file
ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); ssize_t read(int fildes, void *buf, size_t nbyte);
The read() function shall attempt to read nbyte bytes from the file associated with the open file descriptor, fildes, into the buffer pointed to by buf.  The behavior of multiple concurrent reads on the same pipe, FIFO, or terminal device is unspecified.
Before any action described below is taken, and if nbyte is zero, the read() function may detect and return errors as described below. In the absence of errors, or if error detection is not performed, the read() function shall return zero and have no other results.
On files that support seeking (for example, a regular file), the read() shall start at a position in the file given by the file offset associated with fildes.  The file offset shall be incremented by the number of bytes actually read.
Files that do not support seeking—for example, terminals—always read from the current position. The value of a file offset associated with such a file is undefined.
No data transfer shall occur past the current end-of-file. If the starting position is at or after the end-of-file, 0 shall be returned. If the file refers to a device special file, the result of subsequent read() requests is implementation-defined.
If the value of nbyte is greater than {SSIZE_MAX}, the result is implementation-defined.
When attempting to read from an empty pipe or FIFO:
*  If no process has the pipe open for writing, read() shall return 0 to indicate end-of-file.
*  If some process has the pipe open for writing and O_NONBLOCK is set, read() shall return -1 and set errno to [EAGAIN].
*  If some process has the pipe open for writing and O_NONBLOCK is clear, read() shall block the calling thread until some data is written or the pipe is closed by all processes that had the pipe open for writing.
When attempting to read a file (other than a pipe or FIFO) that supports non-blocking reads and has no data currently available:
*  If O_NONBLOCK is set, read() shall return -1 and set errno to [EAGAIN].
*  If O_NONBLOCK is clear, read() shall block the calling thread until some data becomes available.
*  The use of the O_NONBLOCK flag has no effect if there is some data available.
The read() function reads data previously written to a file. If any portion of a regular file prior to the end-of-file has not been written, read() shall return bytes with value 0. For example, lseek() allows the file offset to be set beyond the end of existing data in the file. If data is later written at this point, subsequent reads in the gap between the previous end of data and the newly written data shall return bytes with value 0 until data is written into the gap.
Upon successful completion, where nbyte is greater than 0, read() shall mark for update the last data access timestamp of the file, and shall return the number of bytes read.  This number shall never be greater than nbyte.  The value returned may be less than nbyte if the number of bytes left in the file is less than nbyte, if the read() request was interrupted by a signal, or if the file is a pipe or FIFO or special file and has fewer than nbyte bytes immediately available for reading. For example, a read() from a file associated with a terminal may return one typed line of data.
If a read() is interrupted by a signal before it reads any data, it shall return -1 with errno set to [EINTR].
If a read() is interrupted by a signal after it has successfully read some data, it shall return the number of bytes read.
For regular files, no data transfer shall occur past the offset maximum established in the open file description associated with fildes.
If fildes refers to a socket, read() shall be equivalent to recv() with no flags set.