.TH dpkg 1 "2011-08-14" "Debian Project" "dpkg suite"
.SH NAME
dpkg \- package manager for Debian
.
.SH SYNOPSIS
.B dpkg
.RI [ option "...] " action
.
.SH WARNING
This manual is intended for users wishing to understand \fBdpkg\fP's
command line options and package states in more detail than that
provided by \fBdpkg \-\-help\fP.

It should \fInot\fP be used by package maintainers wishing to
understand how \fBdpkg\fP will install their packages. The
descriptions of what \fBdpkg\fP does when installing and removing
packages are particularly inadequate.
.
.SH DESCRIPTION
\fBdpkg\fP is a tool to install, build, remove and manage
Debian packages. The primary and more user-friendly
front-end for \fBdpkg\fP is \fBaptitude\fP(1). \fBdpkg\fP itself is
controlled entirely via command line parameters, which consist of exactly
one action and zero or more options. The action-parameter tells \fBdpkg\fP
what to do and options control the behavior of the action in some way.

\fBdpkg\fP can also be used as a front-end to \fBdpkg\-deb\fP(1) and
\fBdpkg\-query\fP(1). The list of supported actions can be found later on
in the \fBACTIONS\fP section. If any such action is encountered \fBdpkg\fP
just runs \fBdpkg\-deb\fP or \fBdpkg\-query\fP with the parameters given
to it, but no specific options are currently passed to them, to use
any such option the back-ends need to be called directly.
.
.SH INFORMATION ABOUT PACKAGES
\fBdpkg\fP maintains some usable information about available
packages. The information is divided in three classes: \fBstates\fP,
\fBselection states\fP and \fBflags\fP. These values are intended to
be changed mainly with \fBdselect\fP.
.SS PACKAGE STATES
.TP
.B not\-installed
The package is not installed on your system.
.TP
.B config\-files
Only the configuration files of the package exist on the system.
.TP
.B half\-installed
The installation of the package has been started, but not completed for
some reason.
.TP
.B unpacked
The package is unpacked, but not configured.
.TP
.B half\-configured
The package is unpacked and configuration has been started, but not yet
completed for some reason.
.TP
.B triggers\-awaited
The package awaits trigger processing by another package.
.TP
.B triggers\-pending
The package has been triggered.
.TP
.B installed
The package is unpacked and configured OK.
.SS PACKAGE SELECTION STATES
.TP
.B install
The package is selected for installation.
.TP
.B hold
A package marked to be on \fBhold\fP is not handled by \fBdpkg\fP,
unless forced to do that with option \fB\-\-force\-hold\fP.
.TP
.B deinstall
The package is selected for deinstallation (i.e. we want to remove all
files, except configuration files).
.TP
.B purge
The package is selected to be purged (i.e. we want to remove everything
from system directories, even configuration files).
.SS PACKAGE FLAGS
.TP
.B reinst\-required
A package marked \fBreinst\-required\fP is broken and requires
reinstallation. These packages cannot be removed, unless forced with
option \fB\-\-force\-remove\-reinstreq\fP.
.
.SH ACTIONS
.TP
\fB\-i\fP, \fB\-\-install\fP \fIpackage-file\fP...
Install the package. If \fB\-\-recursive\fP or \fB\-R\fP option is
specified, \fIpackage-file\fP must refer to a directory instead.

Installation consists of the following steps:
.br

\fB1.\fP Extract the control files of the new package.
.br

\fB2.\fP If another version of the same package was installed before
the new installation, execute \fIprerm\fP script of the old package.
.br

\fB3.\fP Run \fIpreinst\fP script, if provided by the package.
.br

\fB4.\fP Unpack the new files, and at the same time back up the old
files, so that if something goes wrong, they can be restored.
.br

\fB5.\fP If another version of the same package was installed before
the new installation, execute the \fIpostrm\fP script of the old
package. Note that this script is executed after the \fIpreinst\fP
script of the new package, because new files are written at the same
time old files are removed.
.br

\fB6.\fP Configure the package. See \fB\-\-configure\fP for detailed
information about how this is done.
.TP
\fB\-\-unpack \fP\fIpackage-file\fP...
Unpack the package, but don't configure it. If \fB\-\-recursive\fP or
\fB\-R\fP option is specified, \fIpackage-file\fP must refer to a
directory instead.
.TP
\fB\-\-configure \fP\fIpackage\fP...|\fB\-a\fP|\fB\-\-pending\fP
Configure a package which has been unpacked but not yet configured.
If \fB\-a\fP or \fB\-\-pending\fP is given instead of \fIpackage\fP,
all unpacked but unconfigured packages are configured.

To reconfigure a package which has already been configured, try the
.BR dpkg\-reconfigure (8)
command instead.

Configuring consists of the following steps:
.br

\fB1.\fP Unpack the conffiles, and at the same time back up
the old conffiles, so that they can be restored if
something goes wrong.
.br

\fB2.\fP Run \fIpostinst\fP script, if provided by the package.
.TP
\fB\-\-triggers\-only\fP \fIpackage\fP...|\fB\-a\fP|\fB\-\-pending\fP
Processes only triggers. All pending triggers will be processed. If package
names are supplied only those packages' triggers will be processed, exactly
once each where necessary. Use of this option may leave packages in the
improper \fBtriggers\-awaited\fP and \fBtriggers\-pending\fP states. This
can be fixed later by running: \fBdpkg \-\-configure \-\-pending\fP.
.TP
\fB\-r\fP, \fB\-\-remove\fP, \fB\-P\fP, \fB\-\-purge \fP\fIpackage\fP...|\fB\-a\fP|\fB\-\-pending\fP
Remove an installed package. \fB\-r\fP or \fB\-\-remove\fP remove
everything except conffiles. This may avoid having to
reconfigure the package if it is reinstalled later. (Conffiles are configuration
files that are listed in the \fIDEBIAN/conffiles\fP control
file). \fB\-P\fP or \fB\-\-purge\fP removes everything, including
conffiles. If \fB\-a\fP or \fB\-\-pending\fP is given instead of a package
name, then all packages unpacked, but marked to be removed or purged
in file \fI/var/lib/dpkg/status\fP, are removed or purged,
respectively. Note: some configuration files might be unknown to
\fBdpkg\fP because they are created and handled separately through the
configuration scripts. In that case, \fBdpkg\fP won't remove them by
itself, but the package's \fIpostrm\fP script (which is called by
\fBdpkg\fP), has to take care of their removal during purge. Of course,
this only applies to files in system directories, not configuration files
written to individual users' home directories.

Removing of a package consists of the following steps:
.br

\fB1.\fP Run \fIprerm\fP script
.br

\fB2.\fP Remove the installed files
.br

\fB3.\fP Run \fIpostrm\fP script
.br
.TP
\fB\-\-update\-avail\fP, \fB\-\-merge\-avail\fP \fIPackages-file\fP
Update \fBdpkg\fP's and \fBdselect\fP's idea of which packages are
available. With action \fB\-\-merge\-avail\fP, old information is
combined with information from \fIPackages-file\fP. With action
\fB\-\-update\-avail\fP, old information is replaced with the information
in the \fIPackages-file\fP. The \fIPackages-file\fP distributed with
Debian is simply named \fIPackages\fP. \fBdpkg\fP keeps its
record of available packages in \fI/var/lib/dpkg/available\fP.

A simpler one-shot command to retrieve and update the \fIavailable\fR
file is \fBdselect update\fR. Note that this file is mostly useless
if you don't use \fBdselect\fR but an APT-based frontend: APT has its
own system to keep track of available packages.
.TP
\fB\-A\fP, \fB\-\-record\-avail\fP \fIpackage-file\fP...
Update \fBdpkg\fP and \fBdselect\fP's idea of which packages are
available with information from the package \fIpackage-file\fP. If
\fB\-\-recursive\fP or \fB\-R\fP option is specified, \fIpackage-file\fP
must refer to a directory instead.
.TP
.B \-\-forget\-old\-unavail
Now \fBobsolete\fP and a no-op as \fBdpkg\fP will automatically forget
uninstalled unavailable packages.
.TP
.B \-\-clear\-avail
Erase the existing information about what packages are available.
.TP
\fB \-C\fP, \fB\-\-audit\fP
Searches for packages that have been installed only partially on your
system. \fBdpkg\fP will suggest what to do with them to get them
working.
.TP
\fB\-\-get\-selections\fP [\fIpackage-name-pattern\fP...]
Get list of package selections, and write it to stdout. Without a pattern,
non-installed packages (i.e. those which have been previously purged)
will not be shown.
.TP
.B \-\-set\-selections
Set package selections using file read from stdin. This file should be
in the format '\fIpackage\fP \fIstate\fP', where state is one of
\fBinstall\fP, \fBhold\fP, \fBdeinstall\fP or \fBpurge\fP. Blank lines
and comment lines beginning with '#' are also permitted.
.TP
.B \-\-clear\-selections
Set the requested state of every non-essential package to deinstall.
This is intended to be used immediately before \-\-set\-selections, to
deinstall any packages not in list given to \-\-set\-selections.
.TP
.B \-\-yet\-to\-unpack
Searches for packages selected for installation, but which for some
reason still haven't been installed.
.TP
.TP
.B \-\-print\-architecture
Print architecture of packages \fBdpkg\fP installs (for example, "i386").
.TP
.B \-\-compare\-versions \fIver1 op ver2\fP
Compare version numbers, where \fIop\fP is a binary operator. \fBdpkg\fP
returns success (zero result) if the specified condition is satisfied,
and failure (nonzero result) otherwise. There are
two groups of operators, which differ in how they treat an empty
\fIver1\fP or \fIver2\fP. These treat an empty version as earlier than any
version: \fBlt le eq ne ge gt\fP. These treat an empty version as later
than any version: \fBlt\-nl le\-nl ge\-nl gt\-nl\fP. These are provided
only for compatibility with control file syntax: \fB< << <= = >= >>
>\fP.
.TP
.B \-\-command\-fd \fIn\fP
Accept a series of commands on input file descriptor \fIn\fP. Note:
additional options set on the command line, and through this file descriptor,
are not reset for subsequent commands executed during the same run.
.TP
.B \-\-help
Display a brief help message.
.TP
.B \-\-force\-help
Give help about the \fB\-\-force\-\fP\fIthing\fP options.
.TP
.BR \-Dh  ", " \-\-debug=help
Give help about debugging options.
.TP
\fB\-\-version\fP
Display \fBdpkg\fP version information.
.TP
\fBdpkg\-deb actions\fP
See \fBdpkg\-deb\fP(1) for more information about the following actions.

.nf
\fB\-b\fP, \fB\-\-build\fP \fIdirectory\fP [\fIarchive\fP|\fIdirectory\fP]
    Build a deb package.
\fB\-c\fP, \fB\-\-contents\fP \fIarchive\fP
    List contents of a deb package.
\fB\-e\fP, \fB\-\-control\fP \fIfilename\fP [\fIdirectory\fP]
    Extract control-information from a package.
\fB\-x\fP, \fB\-\-extract\fP \fIarchive directory\fP
    Extract the files contained by package.
\fB\-X\fP, \fB\-\-vextract\fP \fIarchive directory\fP
    Extract and display the filenames contained by a
    package.
\fB\-f\fP, \fB\-\-field\fP  \fIarchive\fP [\fIcontrol-field\fP...]
    Display control field(s) of a package.
\fB\-\-fsys\-tarfile\fP \fIarchive\fP
    Display the filesystem tar-file contained by a
    Debian package.
\fB\-I\fP, \fB\-\-info\fP \fIarchive\fP [\fIcontrol-file\fP...]
    Show information about a package.
.fi

.TP
\fBdpkg\-query actions\fP
See \fBdpkg\-query\fP(1) for more information about the following actions.

.nf

\fB\-l\fP, \fB\-\-list\fP \fIpackage-name-pattern\fP...
    List packages matching given pattern.
\fB\-s\fP, \fB\-\-status\fP \fIpackage-name\fP...
    Report status of specified package.
\fB\-L\fP, \fB\-\-listfiles\fP \fIpackage-name\fP...
    List files installed to your system from \fIpackage-name\fP.
\fB\-S\fP, \fB\-\-search\fP \fIfilename-search-pattern\fP...
    Search for a filename from installed packages.
\fB\-p\fP, \fB\-\-print\-avail\fP \fIpackage-name\fP...
    Display details about \fIpackage-name\fP, as found in
    \fI/var/lib/dpkg/available\fP. Users of APT-based frontends
    should use \fBapt\-cache show\fP \fIpackage-name\fP instead.
.fi
.
.SH OPTIONS
All options can be specified both on the command line and in the \fBdpkg\fP
configuration file \fI/etc/dpkg/dpkg.cfg\fP or the files on the configuration
directory \fI/etc/dpkg/dpkg.cfg.d/\fP. Each line in the configuration
file is either an option (exactly the same as the command line option but
without leading dashes) or a comment (if it starts with a \fB#\fR).
.br
.TP
\fB\-\-abort\-after=\fP\fInumber\fP
Change after how many errors \fBdpkg\fP will abort. The default is 50.
.TP
.BR \-B ", " \-\-auto\-deconfigure
When a package is removed, there is a possibility that another
installed package depended on the removed package. Specifying this
option will cause automatic deconfiguration of the package which
depended on the removed package.
.TP
\fB\-D\fIoctal\fP, \fB\-\-debug=\fP\fIoctal\fP
Switch debugging on. \fIoctal\fP is formed by bitwise-orring desired
values together from the list below (note that these values may change
in future releases). \fB\-Dh\fP or \fB\-\-debug=help\fP display these
debugging values.

    Number   Description
         1   Generally helpful progress information
         2   Invocation and status of maintainer scripts
        10   Output for each file processed
       100   Lots of output for each file processed
        20   Output for each configuration file
       200   Lots of output for each configuration file
        40   Dependencies and conflicts
       400   Lots of dependencies/conflicts output
     10000   Trigger activation and processing
     20000   Lots of output regarding triggers
     40000   Silly amounts of output regarding triggers
      1000   Lots of drivel about e.g. the dpkg/info dir
      2000   Insane amounts of drivel
.TP
\fB\-\-force\-\fP\fIthings\fP, \fB\-\-no\-force\-\fP\fIthings\fP, \fB\-\-refuse\-\fP\fIthings\fP

Force or refuse (\fBno\-force\fP and \fBrefuse\fP mean the same thing)
to do some things. \fIthings\fP is a comma separated list of things
specified below. \fB\-\-force\-help\fP displays a message describing them.
Things marked with (*) are forced by default.

\fIWarning: These options are mostly intended to be used by experts
only. Using them without fully understanding their effects may break
your whole system.\fP

\fBall\fP:
Turns on (or off) all force options.

\fBdowngrade\fP(*):
Install a package, even if newer version of it is already installed.

\fIWarning: At present dpkg does not do any dependency 
checking on downgrades and therefore will not warn you 
if the downgrade breaks the dependency of some other 
package. This can have serious side effects, downgrading
essential system components can even make your whole
system unusable. Use with care.\fP

\fBconfigure\-any\fP:
Configure also any unpacked but unconfigured packages on which the current
package depends.

\fBhold\fP:
Process packages even when marked "hold".

\fBremove\-reinstreq\fP:
Remove a package, even if it's broken and marked to require
reinstallation. This may, for example, cause parts of the package to
remain on the system, which will then be forgotten by \fBdpkg\fP.

\fBremove\-essential\fP:
Remove, even if the package is considered essential. Essential
packages contain mostly very basic Unix commands. Removing them might
cause the whole system to stop working, so use with caution.

\fBdepends\fP:
Turn all dependency problems into warnings.

\fBdepends\-version\fP:
Don't care about versions when checking dependencies.

\fBbreaks\fP:
Install, even if this would break another package.

\fBconflicts\fP:
Install, even if it conflicts with another package. This is dangerous,
for it will usually cause overwriting of some files.

\fBconfmiss\fP:
Always install a missing conffile. This is dangerous,
since it means not preserving a change (removing) made to the
file.

\fBconfnew\fP:
If a conffile has been modified always install the new version without
prompting, unless the \fB\-\-force\-confdef\fP is also specified, in
which case the default action is preferred.

\fBconfold\fP:
If a conffile has been modified always keep the old version without
prompting, unless the \fB\-\-force\-confdef\fP is also specified, in
which case the default action is preferred.

\fBconfdef\fP:
If a conffile has been modified always choose the default action. If
there is no default action it will stop to ask the user unless 
\fB\-\-force\-confnew\fP or \fB\-\-force\-confold\fP is also been given, in
which case it will use that to decide the final action.

\fBconfask\fP:
If a conffile has been modified always offer to replace it with the
version in the package, even if the version in the package did not
change. If any of \fB\-\-force\-confmiss\fP, \fB\-\-force\-confnew\fP,
\fB\-\-force\-confold\fP, or \fB\-\-force\-confdef\fP is also given,
it will be used to decide the final action.

\fBoverwrite\fP:
Overwrite one package's file with another's file.

\fBoverwrite\-dir\fP
Overwrite one package's directory with another's file.

\fBoverwrite\-diverted\fP:
Overwrite a diverted file with an undiverted version.

\fBunsafe\-io\fP:
Do not perform safe I/O operations when unpacking. Currently this
implies not performing file system syncs before file renames, which is
known to cause substantial performance degradation on some file systems,
unfortunately the ones that require the safe I/O on the first place due
to their unreliable behaviour causing zero-length files on abrupt
system crashes.

\fINote\fP: For ext4, the main offender, consider using instead the
mount option \fBnodelalloc\fP, which will fix both the performance
degradation and the data safety issues, the latter by making the file
system not produce zero-length files on abrupt system crashes with
any software not doing syncs before atomic renames.

\fIWarning: Using this option might improve performance at the cost of
losing data, use with care.\fP

\fBarchitecture\fP:
Process even packages with wrong or no architecture.

\fBbad\-version\fP:
Process even packages with wrong versions.

\fBbad\-path\fP:
\fBPATH\fP is missing important programs, so problems are likely.

\fBnot\-root\fP:
Try to (de)install things even when not root.

\fBbad\-verify\fP:
Install a package even if it fails authenticity check.

.TP
\fB\-\-ignore\-depends\fP=\fIpackage\fP,...
Ignore dependency-checking for specified packages (actually, checking is
performed, but only warnings about conflicts are given, nothing else).
.TP
\fB\-\-no\-act\fP, \fB\-\-dry\-run\fP, \fB\-\-simulate\fP
Do everything which is supposed to be done, but don't write any
changes. This is used to see what would happen with the specified
action, without actually modifying anything.

Be sure to give \fB\-\-no\-act\fP before the action-parameter, or you might
end up with undesirable results. (e.g. \fBdpkg \-\-purge foo
\-\-no\-act\fP will first purge package foo and then try to purge package
\-\-no\-act, even though you probably expected it to actually do nothing)
.TP
\fB\-R\fP, \fB\-\-recursive\fP
Recursively handle all regular files matching pattern \fB*.deb\fP
found at specified directories and all of its subdirectories. This can
be used with \fB\-i\fP, \fB\-A\fP, \fB\-\-install\fP, \fB\-\-unpack\fP and
\fB\-\-avail\fP actions.
.TP
\fB\-G\fP
Don't install a package if a newer version of the same package is already
installed. This is an alias of \fB\-\-refuse\-downgrade\fP.
.TP
.BI \-\-admindir= dir
Change default administrative directory, which contains many files that
give information about status of installed or uninstalled packages, etc.
(Defaults to \fI/var/lib/dpkg\fP)
.TP
.BI \-\-instdir= dir
Change default installation directory which refers to the directory where
packages are to be installed. \fBinstdir\fP is also the directory passed
to \fBchroot\fP(2) before running package's installation scripts, which
means that the scripts see \fBinstdir\fP as a root directory.
(Defaults to \fI/\fP)
.TP
.BI \-\-root= dir
Changing \fBroot\fP changes \fBinstdir\fP to \fIdir\fP and \fBadmindir\fP
to \fIdir\fP\fB/var/lib/dpkg\fP.
.TP
\fB\-O\fP, \fB\-\-selected\-only\fP
Only process the packages that are selected for installation. The
actual marking is done with \fBdselect\fP or by \fBdpkg\fP, when it
handles packages. For example, when a package is removed, it will
be marked selected for deinstallation.
.TP
.BR \-E ", " \-\-skip\-same\-version
Don't install the package if the same version of the package is already
installed.
.P
.BI \-\-pre\-invoke= command
.br
.BI \-\-post\-invoke= command
.RS
Set an invoke hook \fIcommand\fP to be run via \*(lqsh \-c\*(rq before or
after the dpkg run for the \fIunpack\fP, \fIconfigure\fP, \fIinstall\fP,
\fItriggers\-only\fP, \fIremove\fP and \fIpurge\fP dpkg actions. This
option can be specified multiple times. The order the options are specified
is preserved, with the ones from the configuration files taking precedence.
The environment variable \fBDPKG_HOOK_ACTION\fP is set for the hooks to the
current dpkg action. Note: front-ends might call dpkg several times per
invocation, which might run the hooks more times than expected.
.RE
.P
.BI \-\-path\-exclude= glob-pattern
.br
.BI \-\-path\-include= glob-pattern
.RS
Set \fIglob-pattern\fP as a path filter, either by excluding or re-including
previously excluded paths matching the specified patterns during install.

\fIWarning: take into account that depending on the excluded paths you
might completely break your system, use with caution.\fP

The glob patterns use the same wildcards used in the shell, were '*' matches
any sequence of characters, including the empty string and also '/'. For
example, \fI'/usr/*/READ*'\fP matches \fI'/usr/share/doc/package/README'\fP.
As usual, '?' matches any single character (again, including '/'). And '['
starts a character class, which can contain a list of characters, ranges
and complementations. See \fBglob\fP(7) for detailed information about
globbing. Note: the current implementation might re-include more directories
and symlinks than needed, to be on the safe side and avoid possible unpack
failures, future work might fix this.

This can be used to remove all paths except some particular ones; a typical
case is:

.nf
.B \-\-path\-exclude=/usr/share/doc/*
.B \-\-path\-include=/usr/share/doc/*/copyright
.fi

to remove all documentation files except the copyright files.

These two options can be specified multiple times, and interleaved with
each other. Both are processed in the given order, with the last rule that
matches a file name making the decision.
.RE
.TP
\fB\-\-status\-fd \fR\fIn\fR
Send machine-readable package status and progress information to file
descriptor \fIn\fP. This option can be specified multiple times. The
information is generally one record per line, in one of the following
forms:
.RS
.TP
.BI "status: " package ": " status
Package status changed; \fIstatus\fR is as in the status file.
.TP
.BI "status: " package " : error : " extended-error-message
An error occurred. Any possible newlines in \fIextended-error-message\fR
will be converted to spaces before output.
.TP
.BI "status: " file " : conffile\-prompt : '" real-old "' '" real-new "' " useredited " " distedited
User is being asked a conffile question.
.TP
.BI "processing: " stage ": " package
Sent just before a processing stage starts. \fIstage\fR is one of
.BR upgrade ", " install " (both sent before unpacking),"
.BR configure ", " trigproc  ", " disappear ", " remove  ", " purge .
.RE
.TP
\fB\-\-status\-logger\fR=\fIcommand\fR
Send machine-readable package status and progress information to the
shell \fIcommand\fR's standard input. This option can be specified
multiple times. The output format used is the same as in \fB\-\-status\-fd.
.RE
.TP
\fB\-\-log=\fP\fIfilename\fP
Log status change updates and actions to \fIfilename\fP, instead of
the default \fI/var/log/dpkg.log\fP. If this option is given multiple
times, the last filename is used. Log messages are of the form
`YYYY-MM-DD HH:MM:SS status \fIstate\fP \fIpkg\fP \fIinstalled-version\fP'
for status change updates;
`YYYY-MM-DD HH:MM:SS \fIaction\fP \fIpkg\fP \fIinstalled-version\fP
\fIavailable-version\fP' for actions where \fIaction\fP is one of
\fBinstall\fP, \fBupgrade\fP, \fBremove\fP, \fBpurge\fP; and
`YYYY-MM-DD HH:MM:SS conffile \fIfilename\fP \fIdecision\fP' for conffile
changes where \fIdecision\fP is either \fBinstall\fP or \fBkeep\fP.
.TP
\fB\-\-no\-debsig\fP
Do not try to verify package signatures.
.TP
\fB\-\-no\-triggers\fP
Do not run any triggers in this run (activations will still be recorded).
If used with \fB\-\-configure\fP \fIpackage\fP or
\fB\-\-triggers\-only\fP \fIpackage\fP then the named package postinst
will still be run even if only a triggers run is needed. Use of this option
may leave packages in the improper \fBtriggers\-awaited\fP and
\fBtriggers\-pending\fP states. This can be fixed later by running:
\fBdpkg \-\-configure \-\-pending\fP.
.TP
\fB\-\-triggers\fP
Cancels a previous \fB\-\-no\-triggers\fP.
.
.SH FILES
.TP
.I /etc/dpkg/dpkg.cfg
Configuration file with default options.
.TP
.I /var/log/dpkg.log
Default log file (see \fI/etc/dpkg/dpkg.cfg\fP(5) and option
\fB\-\-log\fP).
.P
The other files listed below are in their default directories, see option
\fB\-\-admindir\fP to see how to change locations of these files.
.TP
.I /var/lib/dpkg/available
List of available packages.
.TP
.I /var/lib/dpkg/status
Statuses of available packages. This file contains information about
whether a package is marked for removing or not, whether it is
installed or not, etc. See section \fBINFORMATION ABOUT PACKAGES\fP
for more info.

The status file is backed up daily in \fI/var/backups\fP. It can be
useful if it's lost or corrupted due to filesystems troubles.
.P
The following files are components of a binary package. See \fBdeb\fP(5)
for more information about them:
.TP
.I control
.TP
.I conffiles
.TP
.I preinst
.TP
.I postinst
.TP
.I prerm
.TP
.I postrm
.
.SH ENVIRONMENT
.TP
.B HOME
If set, \fBdpkg\fP will use it as the directory from which to read the user
specific configuration file.
.TP
.B TMPDIR
If set, \fBdpkg\fP will use it as the directory in which to create
temporary files and directories.
.TP
.B PAGER
The program \fBdpkg\fP will execute when displaying the conffiles.
.TP
.B SHELL
The program \fBdpkg\fP will execute when starting a new shell.
.TP
.B COLUMNS
Sets the number of columns \fBdpkg\fP should use when displaying formatted
text. Currently only used by \-l.
.TP
.B DPKG_SHELL_REASON
Defined by \fBdpkg\fP on the shell spawned on the conffile prompt to
examine the situation. Current valid value: \fBconffile\-prompt\fP.
.TP
.B DPKG_CONFFILE_OLD
Defined by \fBdpkg\fP on the shell spawned on the conffile prompt to
examine the situation. Contains the path to the old conffile.
.TP
.B DPKG_CONFFILE_NEW
Defined by \fBdpkg\fP on the shell spawned on the conffile prompt to
examine the situation. Contains the path to the new conffile.
.TP
.B DPKG_RUNNING_VERSION
Defined by \fBdpkg\fP on the maintainer script environment to the
version of the currently running \fBdpkg\fP instance.
.TP
.B DPKG_MAINTSCRIPT_PACKAGE
Defined by \fBdpkg\fP on the maintainer script environment to the
package name being handled.
.TP
.B DPKG_MAINTSCRIPT_ARCH
Defined by \fBdpkg\fP on the maintainer script environment to the
architecture the package got built for.
.TP
.B DPKG_MAINTSCRIPT_NAME
Defined by \fBdpkg\fP on the maintainer script environment to the
name of the script running (preinst, postinst, prerm, postrm).
.
.SH EXAMPLES
To list packages related to the editor \fBvi\fP(1):
.br
\fB     dpkg \-l \(aq*vi*\(aq\fP
.br

To see the entries in \fI/var/lib/dpkg/available\fP of two packages:
.br
\fB     dpkg \-\-print\-avail elvis vim | less\fP
.br

To search the listing of packages yourself:
.br
\fB     less /var/lib/dpkg/available\fP
.br

To remove an installed elvis package:
.br
\fB     dpkg \-r elvis\fP
.br

To install a package, you first need to find it in an archive or
CDROM. The "available" file shows that the vim package is in section
"editors":
.br
\fB     cd /media/cdrom/pool/main/v/vim\fP
\fB     dpkg \-i vim_4.5\-3.deb\fP
.br

To make a local copy of the package selection states:
.br
\fB     dpkg \-\-get\-selections >myselections\fP
.br

You might transfer this file to another computer, and install it there
with:
.br
\fB     dpkg \-\-clear\-selections\fP
\fB     dpkg \-\-set\-selections <myselections\fP
.br

Note that this will not actually install or remove anything, but just
set the selection state on the requested packages. You will need some
other application to actually download and install the requested
packages. For example, run \fBapt\-get dselect\-upgrade\fP.

Ordinarily, you will find that \fBdselect\fP(1) provides a more
convenient way to modify the package selection states.
.br
.
.SH ADDITIONAL FUNCTIONALITY
Additional functionality can be gained by installing any of the
following packages: \fBapt\fR, \fBaptitude\fR and \fBdebsums\fR.
.
.SH SEE ALSO
\fBaptitude\fP(1),
\fBapt\fP(1),
\fBdselect\fP(1),
\fBdpkg\-deb\fP(1),
\fBdpkg\-query\fP(1),
\fBdeb\fP(5),
\fBdeb\-control\fP(5),
\fBdpkg.cfg\fP(5),
and
\fBdpkg\-reconfigure\fP(8).
.
.SH BUGS
\fB\-\-no\-act\fP usually gives less information than might be helpful.
.
.SH AUTHORS
See \fI/usr/share/doc/dpkg/THANKS\fP for the list of people who have
contributed to \fBdpkg\fP.
