Debian notes: doing things the "Debian Way"
Warning: this page is very old! Some of it, like the boot-time
hints, are outdated, though most of the package management commands
I used Redhat and other RPM-based linux distros for years. When
I started using Debian, I began maintaining this set of notes
reminding me of some of the different ways Debian has of doing things.
In many cases, I've listed the comparable Debian and Redhat commands.
See also the Debian
mandb -c does what makewhatis does in other distros
and other Unices -- builds the whatis/apropos databases.
It's part of the man-db package.
Updating and installing packages
- apt update
- Run this after changing /etc/apt/sources.list or /etc/apt/preferences.
(this debianhelp.org page
is helpful); run it periodically anyway, to make sure your source
list is up-to-date.
- apt dist-upgrade
- Get all software updates available for this distro.
(apt upgrade and apt -f dist-upgrade are other options;
see this blog
post for some of the differences.)
- apt install packagename
- installs a new package: rpm -i package.rpm
- apt autoclean
- Run this periodically to clean out .deb archives from packages
which are no longer installed on the system. You can regain lots of
disk space that way. If you're really desperate for disk space,
apt clean is more radical, and will remove .deb files
even for packages currently installed. But most of the time you
probably don't need the .debs any more, so it might be worth it
if you're strapped for megabytes.
Querying packages not yet installed
- apt-cache search string
- Searches for string in the list of known packages.
- aptitude search string
- Searches for string in the list of known packages,
with output that's a little easier to read than apt-cache.
- dpkg -l package-name-pattern
- List packages matching pattern: rpm -q pattern or rpm -qa | grep pattern.
- apt-file search filename
- Search for a package (need not be installed) containing files
including the string.
apt-file is a package of its own, which you
may have to apt install first, then run apt-file update.
If apt-file search filename shows you too much, try
apt-file search filename | grep -w filename (which shows you
only the files that contain filename as a whole word) or variants like
apt-file search filename | grep /bin/ only files located in
directories like /bin or /usr/bin, useful if you're looking for a
- apt-cache showpkg pkgs...
- Show information about packages.
- apt-cache dumpavail
- Prints out an available list.
- apt-cache show pkgs...
- Displays package records, even uninstalled ones,
similar to dpkg --print-avail.
Like rpm -q packagename.
- apt-cache depends <package>
- Show what <package> depends on.
- apt-cache rdepends <package>
- Show what other packages depend on <package>.
- grep-excuses <package>
- Show why package, in unstable, isn't in testing yet.
- apt-cache pkgnames
- Fast listing of every package in the system.
- apt install -s --no-install-recommends --no-install-suggests pkgs...
- -s stands for "simulate", and you can do this as yourself, not root.
You can turn off recommends and/or suggests for a single install;
or you can turn them off permanently by editing /etc/apt/apt.conf
Querying currently installed packages
- dpkg -S file
- Which installed package owns the file? Like rpm -qf file.
- dpkg -L package
- List files in the package. Like rpm -ql package.
- apt-cache policy pkg
- Show which repository pkg came from, if you have
multiple ones in sources.list.
- apt-cache show <package> | grep ^Source
- Find the source package which produces this binary package.
If it returns nothing, then the source package name is the
same as the binary package name.
Some other useful commands
- apt autoremove
- Clean out packages that were installed as a dependency of
a package that's no longer installed.
- apt clean
- Remove .deb files from old packages that are no longer installed.
- deborphan and apt remove `deborphan`
- Find libraries no longer needed by any installed apps.
- apt dselect-upgrade
- Clean out even more orphan packages.
- apt-mark hold packagename
apt-mark unhold packagename
- Hold a package that would otherwise be removed.
For instance, to keep an older kernel in place when newer ones break.
HOWTO has instructions on "pinning" and other details of
maintaining a mixed debian system (e.g. stable but using some
packages from unstable). It also shows how to pin a package so
it will not be upgraded (for instance, if you've made local
deborphan and debfoster are great for finding orphaned
and unneeded packages which can be removed.
You can pull from a different repository by editing /etc/apt/sources.list
to replace "stable" with "unstable" (or whatever) then doing apt update.
That gets old, though, so here's a better way:
Here's a sample unstable preferences file.
apt install build-essential fakeroot devscripts
apt build-dep packagename
apt source packagename
debuild -b -uc -us
Boot time services
- update-rc.d svc defaults
- Enable service at boot time. chkconfig svc on
- update-rc.d svc stop 0 1 2 3 4 5 6
- Disable scv at boot time. This puts "K" links in all relevant
runlevels, so theoretically apt will know to keep the
service disabled, and won't re-enable it.
At least in theory. In practice there's something wrong
with the command and I haven't figured out how to make it
work. Adding "." at the end doesn't work either.
- update-rc.d -f svc remove
- Disable service at boot time. chkconfig svc off
This is simpler than the preceeding line, but less permanent;
services will come back on an apt install or dist-upgrade.
-f means force removal of the /etc/rc.? scripts while
leaving the basic script in /etc/init.d (so you can run the
service by hand if you choose).
--purge means remove the script from init.d.
If you want to remove a service so that it never starts unless
asked, and never comes back in a dist-upgrade ... I still
don't know. Apparently the only way is to go to each directory
named /etc/rc?.d in turn, and then rename Snnservicename
to Knnservicename (which you can't easily do as a script
or alias because of the nns being variable).
It's unbelievable that debian has no easier way to do this.
- update-rc.d svc start 20 2 3 4 5 . stop 20 0 1 6
- Enable service at boot time in the given runlevels, like
chkconfig svc --levels 2345 on
- For listing active services, I wrote a shell script:
- What services are currently enabled? chkconfig --list
apt history: what's been recently installed?
There's no real or supported way to see your recent apt history,
unfortunately. But if you sort /var/cache/apt/archives by create
ls -ltc /var/cache/apt/archives | more
you can get a list of packages in reverse order of when they were
downloaded. Also, sometimes you can get useful apt install
information from /var/log/apt/term.log.
Neither one helps in finding out what you've removed recently, though.
I could never get my Epson printer to work through normal cups
configuration. But a new (late 2004) package called
printconf auto-detects it and does the necessary magic.
If you're having problems with Debian CUPS, try printconf.
If printing from mozilla doesn't work, persistently gets the page
size wrong (e.g. keeps going back to A4 even though your system
page size is us-letter), or prints pages twice as big as they should
be (so you only see the top left quarter of the page and your
printer dies horribly trying to print a 16" wide page), try
stopping Xprt -- /etc/init.d/xprt stop -- and see
if that helps. If so, since the next dist-upgrade will turn it
back on again, I recommend just removing Xprt:
apt --purge remove xprt xprt-common xprt-xprintorg
apt will tell you it's going to remove "x-window-system".
Don't panic! That's just a meta-package; removing it will not
remove your X server or libraries.
Speeding up USB init during boot
Debian seems to take a lot longer to get through USB during boot than
Redhat on my Vaio. That turns out to be hotplug running usb.agent
for the devices it finds (basically, I think, the hub and the empty
memory stick reader). You can drastically speed up boot by editing
/etc/hotplug/usb.rc and adding an ampersand (&) after the line
that runs /etc/hotplug/usb.agent inside the loop in usb_boot_events().
Shallow Sky home