个人工具

UbuntuHelp:AptGetHowto

来自Ubuntu中文

Oneleaf讨论 | 贡献2007年5月13日 (日) 11:44的版本 (New page: {{From|https://help.ubuntu.com/community/AptGetHowto}} {{Languages|php5}} == Package management with apt == attachment:IconsPage/IconApt.png Package management via apt-get runs hand-in-h...)

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航, 搜索


Package management with apt

attachment:IconsPage/IconApt.png Package management via apt-get runs hand-in-hand with the sources.list file. For information on editing or updating that files entries, see UbuntuHelp:SourcesList

Intro

"In the beginning there was the .tar.gz. Users had to compile each program that they wanted to use on their GNU/Linux systems. When Debian was created, it was deemed necessary that the system include a method of managing the packages installed on the machine. The name dpkg was given to this system. Thus the famous 'package' first came into being on GNU/Linux, a while before Red Hat decided to create their own 'rpm' system.

A new dilemma quickly took hold of the minds of the makers of GNU/Linux. They needed a rapid, practical, and efficient way to install packages that would manage dependencies automatically and take care of their configuration files while upgrading. Here again, Debian led the way and gave birth to APT, the Advanced Packaging Tool, which has since been ported by Conectiva for use with rpm and has been adopted by some other distributions."

-- From Debian APT HOWTO

Commands

All these commands require sudo! Replace "packagename" or "string" with the program you're installing or searching for.

  • apt-get update - Run this after changing /etc/apt/sources.list or /etc/apt/preferences. You also must run it periodically to make sure your source list is up-to-date. This is the equivalent of “reload” in Synaptic, or “check for updates” in Windows or OS X.
  • apt-get install packagename - installs a new package (but see aptitude, below)
  • apt-get remove packagename - removes a installed package (configfiles remain)
  • apt-get --purge remove packagename - removes a installed package (configfiles will also be removed)
        • A special trick: if you want to remove package “foo” and install package “bar” in one step: apt-get --purge remove foo bar+ .
  • apt-get autoremove packagename - removes a installed package and dependencies
  • apt-get upgrade - upgrades all installed packages. This is the equivalent of “mark all upgrades” and “apply” in Synaptic in one step.
  • apt-get dist-upgrade - upgrades the entire system to a newer release. The same as the above, except add the “smart upgrade” checkbox -- i.e. tell APT to do whatever it has to do to upgrade to the latest packages, even if it means removing some other packages. (NB this is not a recommended way of upgrading to a new release)
  • apt-get -f install -- the same as “Edit->Fix Broken Packages” and “Apply” in synaptic. Do this if you get complaints about packages with “unmet dependences”.
  • apt-get 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-get 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.
  • apt-get clean -- the same as above, excecpt remove *all* packages from the package cache. Usually you don’t need them, so this is smart if you’re running low on disk space. If you’re on dial-up, you might reconsider.
         * The package cache is in /var/cache/apt/archives, so "du -sh /var/cache/apt/archives" will tell you how much space cached packages are taking up.
  • apt-cache search foo -- find packages that match “foo”.
  • apt-cache show foo -- show information about package “foo”.
  • dpkg -l ’*foo*‘ -- find packages whose names contain “foo”.
  • dpkg -L foo -- what files has the “foo” package installed on my system? This is *very* useful.
  • dlocate foo -- show files from installed packages that match “foo”, with the name of the package they came from. This is sort of the inverse of the above, and is useful for answering the question “What package did this file come from?“ You have to have the dlocate package installed for this to work.
  • dpkg -S foo -- like the above, but much slower. It’ll work on any Debian or Ubuntu system, i.e. it doesn’t require that dlocate be installed.
  • apt-file search foo -- like dlocate and dpkg -S, but searches all available packages, not just the ones that are installed on your system -- i.e. it answers the question ”what package provides this file?“. You’ll have to install the apt-file package first, and keep the apt-file database up to date (i.e. you have to do apt-file update just like you do apt-get update).
  • dpkg -c foo.deb -- what files does the ”foo.deb“ package contain? Note that foo.deb is a pathname -- this is for .deb packages you’ve downloaded by hand.
  • dpkg-reconfigure foo -- reconfigure package ”foo“. You really want to know this one. With many packages, you’ll be prompted with some configuration questions you may not have known were there. For example: dpkg-reconfigure fontconfig-config will present present you with a ”wizard“ on configuring fonts in Ubuntu. I run this one on every Ubuntu install I do, because I want to make bitmapped fonts available to all my apps.
         * dpkg-reconfigure, like the name says, is for *reconfiguring* packages -- if you’ve installed a package that’s asked you questions, and you’d like to change some of those answers, this is what you’re looking for.
  • apt-cache search string - Searches for string in the list of known packages
  • dpkg -l package-name-pattern - List installed packages matching pattern. Practically speaking you have to use '*package-name-pattern*' unless you know the fully exact name of the package.
  • aptitude - Curses viewer of packages installed or available. Aptitude can be used from the command-line in a similar way to apt-get, but only for some commands - install and remove being the most common. However, because aptitude keeps track of more information than apt-get does, it can be considered better at install and remove operations.
  • apt-cache showpkg pkgs - Show information about packages.
  • apt-cache dumpavail - Prints out an available list.
  • apt-cache show pkgs - Displays package records, similar to dpkg --print-avail.
  • apt-cache pkgnames - Fast listing of every package in the system.
  • dpkg -S file - Which installed package owns the file?
  • dpkg -L package - List files in the package.
  • 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-get 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 particular executable).
  • echo "foo hold" | dpkg --set-selectons -- place package "foo" on hold, i.e. don't upgrade this package, even if it means holding back loads of upgrades that depend on the upgraded version. This is the same as Synaptic's "Package->Lock Version"
         * Note that apt-get dist-upgrade will override this, but will warn you first. Also, if you want to use this with sudo, you need 'echo "foo hold" | sudo dpkg --set-selections' and not 'sudo echo "foo hold" | dpkg --set-selections'.
  • echo "foo install" -- remove the "hold" or "locked package" state set above. The same thing with sudo applies, i.e. it's 'echo "foo install" | sudo dpkg --set-selections'


Typical use case

I want to feel the wind in my hair, I want the adrenaline of speed. So lets install a racing game. But what racing games are available?

apt-cache search racing game</code>
It gives me a lot of answers. I see a game named "torcs".  Lets get some more information on this game.
<pre>
apt-cache show torcs</code>
Hmmm... it seems intersting. But is this game not already installed on my computer? And what is the available version? Is it from Universe or main?
<pre>
apt-cache policy torcs</code>
Ok, so now, let's install it!
<pre>
apt-get install torcs</code>
What is the command I must type in the console to launch this game? In this example, it's straightforward ("torcs"), but that's not always the case. One way of finding the name of the binary is to look at what files the package has installed in "/usr/bin".  For games, the binary will be in "/usr/games". For administrative programs, it's in "/usr/sbin".
<pre>
dpkg -L torcs|grep /usr/games/</code>
The first part of the command display all files installed by the package "torcs" (try it). With the second part, we ask to only display lines containing "/usr/games/".

Hmmm, that game is cool. Maybe there are some extra tracks?
<pre>
apt-cache search torcs</code>
But I'm running out of space. I will delete the apt cache!
<pre>
apt-get clean</code>
Oh no, my mother asked me to remove all games from this computer. But I want to keep the configuration files so I can simply re-install it later.
<pre>
apt-get remove torcs</code>
If I want to also remove config files :
<pre>
apt-get remove --purge torcs</code>

=== Additional packages ===

<code>deborphan</code> and <code>debfoster</code> are great for finding orphaned and unneeded packages which can be removed.

=== Speeding up your work at the command line ===

You can create aliases to make typing these commands faster.  For example, you might put this in your *~/.bashrc*

<pre>
    alias acs='apt-cache search'
    alias agu='sudo apt-get update'
    alias agg='sudo apt-get upgrade'
    alias agd='sudo apt-get dist-upgrade'
    alias agi='sudo apt-get install'
    alias agr='sudo apt-get remove'</code>

But see aptitude, above, for a reason to use "alias agi='sudo aptitude install'"

=== Setting up apt-get to use a http-proxy ===

These are three methods of using apt-get with a http-proxy.

'''Method 1.'''

This is a temporary method that you can manually use each time you want to use apt-get through a http-proxy. This method is useful if you only want to temporarily use a http-proxy.

Enter this line in the terminal prior to using apt-get (substitute your details for yourproxyaddress and proxyport).

<pre>
export http_proxy=http://yourproxyaddress:proxyport</code>

'''Method 2.'''

This method uses the apt.conf file which is found in your /etc/apt/ directory. This method is useful if you only want apt-get (and not other applications) to use a http-proxy permanently.

Note:- On some installations there will be no apt-conf file set up.  This procedure will either edit an existing apt-conf file or create a new apt-conf file.

<pre>
gksudo gedit /etc/apt/apt.conf</code>

Add this line to your apt.conf file (substitute your details for yourproxyaddress and proxyport).

<pre>
Acquire::http::Proxy "http://yourproxyaddress:proxyport";</code>

Save the apt.conf file.

'''Method 3.'''

This method adds a two lines to your .bashrc file in your $HOME directory. This method is useful if you would like apt-get and other applications for instance wget, to use a http-proxy.

<pre>
gedit ~/.bashrc</code>
add these lines to the bottom of your .bashrc file (substitute your details for yourproxyaddress and proxyport)

<pre>
http_proxy=http://yourproxyaddress:proxyport
export http_proxy</code>

Save the file. Close your terminal window and then open another terminal window

Test proxy with sudo apt-get update and whatever networking tool you desire.  I use firestarter to see active connections.

If you make a mistake and go back to edit the file again, remember to close the terminal and reopen it. It will not function with the new settings until you do.


=== Links ===

* [http://www.debian.org/doc/manuals/apt-howto/index.en.html Debian Apt-howto documentation] also available as package: *apt-howto*
* For further apt-get goodness see: PinningHowto

[[category:UbuntuHelp]]