深度操作系统使用dpkg包管理. 我们除了通过常用的深度商店、Synaptic等图形软件管理工具外,也可以通过命令对软件包进行安装、卸载与系统升级等日常管理。
下面我们介绍如何在深度操作系统下使用命令管理软件包,管理功能包括:
注释:
dpkg命令一般需要root权限执行,所以一般跟着sudo命令 例如: sudo dpkg xxxx
格式:
dpkg [<选项> ...] <命令>
dpkg -s package | grep Status ##查询软件包是否安装
dpkg -s package ##查看软件包是否安装,获取其他有用信息
dpkg -S filesname ##查找文件属于哪个安装包
dpkg -C ##搜索损坏的软件包
dpkg -i <package.deb> ##安装软件包
dpkg -r package ##删除已安装的软件包,但保留配置文件
dpkg -P package ##删除已安装软件包,完全清除包(含配置文件)
dpkg -h ##获取更多关于dpkg用法的信息
dpkg -S file ##这个文件属于哪个已安装软件包。
dpkg -L package ##列出软件包中的所有文件。
dpkg –force-all –purge packagename ##有些软件很难卸载,而且还阻止了别的软件的应用,就可以用这个,不过有点冒险。
APT由以下的幾個主要的命令構成:
apt-get:智能的解决软件包的依赖关系,方便软件的安装和升级(最新版只用apt,去掉了-get)
apt-cache:查询apt的二进制软件包缓存文件
apt-file:软件包查找工具,可以查到软件包所含的文件和安装的位置
apt-get/apt命令[编辑]
apt-get/apt命令一般需要root权限执行,所以一般跟着sudo命令 例如: sudo apt-get xxxx 格式:
apt-get在最新版中已更新为apt
sudo apt-get [options1] [options2]
apt-get update ##在修改/etc/apt/sources.list或者/etc/apt/preferences之後运行该命令。此外您需要定期运行这一命令以确保您的软件包列表是最新的
apt-get install package_name ##安装一个新软件包
apt-get remove package_name ##卸载一个已安装的软件包(保留配置文件)
apt-get --purge remove package_name ##卸载一个已安装的软件包(删除配置文件)
apt-get autoclean ##删除已卸载软件的软件包
apt-get clean ##这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的。
apt-get upgrade ##更新所有已安装的软件包
apt-get dist-upgrade ##将系统升级到新版本
apt-get autoclean ##清除那些已经卸载的软件包的.deb文件
apt-get autoremove ##删除某个包的同时,删除依赖于它的包
apt-cache show package_name ##显示软件包记录,类似于dpkg –print-avail。
apt-cache search package_name ##在软件包列表中搜索字符串
apt-cache showpkg package_name ##显示软件包信息。
apt-cache policy package_name ##显示软件包的安装状态和版本信息。
apt-cache depends package_name ##显示指定软件包所依赖的软件包。
apt-cache rdepends package_name ##显示软件包的反向依赖关系,即有什么软件包需依赖你所指定的软件包。
apt-cache dumpavail package_name ##打印可用软件包列表。
apt-cache pkgnames package_name ##打印软件包列表中所有软件包的名称。
apt install apt-file ##安装apt-file命令。
apt-file update ##更新软件包的文件库,第一次使用或apt-get update后都需运行一次。
apt-file search package_name ## 查找包含特定文件的软件包(不一定是已安装的),这些文件的文件名中含有指定的字符串。
apt-file list package_name ##显示该软件包的文件。
aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。
与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。
aptitude命令一般也需要root权限执行,所以一般跟着sudo命令 例如: sudo aptitude xxxx
格式:
aptitude [-S 文件名] [-u|-i]
aptitude [选项] <动作> ...动作
(如果未指定,aptitude 将进入交互模式):
aptitude install <pkgname> ##安装/升级软件包
aptitude remove <pkgname> ##卸载软件包
aptitude purge <pkgname> ##卸载软件包并删除其配置文件
aptitude forbid-version ##禁止 aptitude 升级到某一特定版本的软件包
aptitude update ##下载新/可升级软件包列表
aptitude safe-upgrade ##执行一次安全的升级
aptitude full-upgrade ##执行升级,可能会安装和卸载软件包
aptitude search ##按名称 和/或 表达式搜索软件包
aptitude show ##显示一个软件包的详细信息
aptitude clean ##删除已下载的软件包文件
aptitude autoclean ##删除旧的已下载软件包文件
aptitude download ##下载软件包的 .deb 文件
aptitude reinstall ##下载并(可能)重新安装一个现在已经安装了的软件包
aptitude --help ##查看更多关于aptitue的用法
dselcet使用频率比较少,在此不多介绍,但是可以阅读:dselect用法小结
若系统没有,则可以使用下面命令安装:
sudo apt-get install dselect
我们使用apt-get安装软件,会自动到软件源服务器下载需要的文件,这些文件存放与/var/cache/apt/archives 目录,如果您不需要可以将其删除,方法为终端执行:
sudo apt-get clean
或者
sudo apt-get autoclean
apt-get clean删除/var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/目录下所有包(锁定的软件包除外)
apt-get autoclean仅删除/var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/目录下旧版本的软件包和无用的软件包(锁定的软件包除外)
在/var/cache/apt/archives/ 文件夹下我们有gimp2.3和gimp2.6版本的两个deb包、chrome28版本的deb包、firefox15版本的deb包(没有锁定的包),我们的系统当前安装了gimp的2.6版本和chrome28版本,并且没有安装firefox软件.
运行sudo apt-get clean,将删除gimp2.3和gimp2.6版本的两个deb包、chrome28版本的deb包、firefox15版本的deb包(也就是全部删除)
运行sudo apt-get autoclean,将删除gimp2.3版本的deb包和firefox15版本的deb包(只删除老旧的软件包和系统当前不需要的包)
当我们需要重置一个软件的设置或者彻底卸载该软件(软件+配置)删除该软件对于的配置文件即可. 配置文件存放的位置有: 1.用户设置(特定用户配置)
~/
~/.config
2.全局设置(系统全局配置)
/usr/share
注释:~/为您的主文件夹.
/home/cxbii/.config/deepin-music-player ##这个路径的配置文件只对cxbii用户有效(即特定用户配置)
/usr/share/deepin-music-player ##这个路径的配置文件对该系统下所有用户都有效(即系统全局配置)
如果我们在删除一个软件包的同时需要删除该软件包的配置,可以加上--purge参数,例如:
sudo apt-get remove --purge package_name
如果我们需要删除特定的软件包,可以终端执行:
sudo apt-get remove package_name
如果需要清除无关的依赖包,可以终端执行:
sudo apt-get autoremove
此命令可以删除系统内部不需要的依赖包,但是此操作有一定的危险性,可能误删需要的依赖包,如果无特殊需要,请不要执行该操作.
apt-get remove为删除某个包的同时,删除依赖于它的包
例如: A 依赖于 B, B 依赖于 C apt-get remove 删除B的同时,将删除A(A依赖于B,B被删了,A也就无法正常运行了)
apt-get autoremove的行为重点是卸载所有自动安装
例如:C 依赖于 B, D 依赖于B, 且D没有被其他手动安装的包依赖
apt-get remove C 将删除C, 同时提示你用apt-get autoremove去清除B,D apt-get autoremove C 将删除B, C, D
aptitude remove C 将删除B, C, D(删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们, 则可以判定B,D也是没必要的)
升级系统分下面几个步骤:
第一步,获得最近的软件包的列表(刷新源);列表中包含一些包的信息,比如这个包是否更新过。
第二步,如果这个包没有发布更新,就不管它;如果发布了更新,就把包下载到电脑上,并安装。
对应到命令操作,我们可以终端执行:
sudo apt-get update ##刷新软件源
然后选择执行一下任一命令:
sudo apt-get upgrade ##更新软件包
sudo apt-get dist-upgrade ##更新系统
upgrade和 dist-upgrade的区别:
无论是使用哪一种方式更新,都需要要运行update更新。
upgrade只是简单的更新包,不管这些依赖,不能添加新的软件包,或是删除软件包。并且不更改相应软件的配置文件(包括内核)
dist-upgrade可以根据依赖关系的变化,添加软件包,删除软件包,并且更改相应软件的配置文件(包括内核)
upgrade适合发行版本正常的软件更新和安装补丁更新.
dist-upgrade适合发行版从测试版等非正式版更新至正式版,或者跨越大版本进行更新(例如深度操作系统11.12更新至深度操作系统12.06).
安装支持“add-apt-repository”命令:
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
sudo apt-get update
虽然apt-get是很智能的包管理器,但是不可避免的也会出现一些问题,因此本页面集中收集最为常见的错误与解决方法
终端出现:
E:Sub-process /usr/bin/dpkg returned an error code (1)
解决方法,终端执行:
cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo dpkg --configure -a
sudo apt-get install -f
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info.bak
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/info.bak /var/lib/dpkg/info
使用apt-get命令安装软件时,终端提示:
E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
解决方法如下:
方法一
已经打开的包管理程序(例如:apt-get 或 aptitude)在运行,请先关掉它。 如果不知道是哪个程序,打开终端查看与apt-get有关的程序,sudo kill 前面的数字。或者
可以重启电脑
方法二
打开终端,依次执行下面的命令:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock sudo rm /var/lib/apt/lists/lock
注意:方法二适用方法一无效的时候。
使用apt-get刷新源,终端出现:
E: Some index files failed to download. They have been ignored, or old ones used instead.
解决方法如下:
方法一
如果是因为修改了官方默认源.恢复默认源即可 深度操作系统默认源
方法二
可能是服务器出问题,请等待一段时间后再次刷新本地源列表,如果依然不行,尝试终端执行:
sudo rm /var/lib/apt/lists/partial/*
sudo apt-get update
使用apt-get刷新源,终端提示:
W: GPG error: http://apt.tt-solutions.com dapper Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY 06EA41DE4F6C1E86
解决方法,终端执行:
gpg --keyserver subkeys.pgp.net --recv 4F6C1E86
gpg --export --armor 4F6C1E86 | sudo apt-key add -
说明: 若缺少其他公钥,则将命令中两处4F6C1E86改为NO_PUBKEY 06EA41DE4F6C1E86中最后8位即可!
如果是PPA源,则执行:
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com
使用apt-get安装软件,终端提示:
E: dpkg 被中断,您必须手工运行 sudo dpkg --configure -a解决此问题。
解决方法,按照提示提示.终端执行:
sudo dpkg --configure -a
如果依然不行则执行:
sudo rm /var/lib/dpkg/updates/*
sudo apt-get update
sudo apt-get upgrade
终端提示:
E: Unable to correct problems, you have held broken packages.
出现此问题一般是依赖出现问题,尝试终端执行:
sudo apt-get install -f
如果无效则执行:
sudo dpkg--configure -a
或者可以按照终端的完整提示删除导致依赖出现问题的软件包,终端执行:
sudo apt-get remove xxx ##xxx为导致依赖出现问题的软件包名
然后终端执行:
sudo apt-get update
终端出现:
'E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/archive.canonical.com_dists_maverick_partner_binary-i386_Packages,
E:无法解析或打开软件包的列表或是状态文件。'
解决方法,终端执行:
sudo rm -rf /var/lib/apt/lists/* -vf
sudo apt-get update
为什么不能同时安装一个以上的软件
首要原因是深度操作系统使用DPKG包管理,统一由DPKG安装软件.(源代码编译软件为例外),并且Linux下的软件有软件依赖这一特殊性,如果同时安装一个以上的软件会让DPKG无法安全的记录软件的依赖包和主程序情况
如果同时运行两个或者以上的DPKG包管理则会出现: 无法锁定管理目录,并且导致软件依赖出现问题,因此只能一个个的安装软件.
注释:深度操作系统使用DPKG包管理,因此此文只适合DPKG包管理的Linux发行版本.
降级软件包
在一些时候,我们需要更低版本而非最近版本的软件,而软件包管理器却已为我们升至最新版本,这时,我们就需要降级某个软件包。
下面以降级 Firefox 为例,说明一下如何降级软件包。在深度操作系统中,Firefox 已升级至 16.0.x 版本,而我们需要更低版本来实现对于某些扩展的兼容。
首先,我们可以使用下面的命令查看一下软件仓库中有哪些可用的 Firefox 版本:
apt-cache madison firefox
得到的输出结果如下:
firefox | 15.0.1+build1-0ubuntu0.12.04.1 | http://packages.linuxdeepin.com/ubuntu/ precise-security/main i386 Packages
firefox | 15.0.1+build1-0ubuntu0.12.04.1 | http://packages.linuxdeepin.com/ubuntu/ precise-updates/main i386 Packages
firefox | 11.0+build1-0ubuntu4 | http://packages.linuxdeepin.com/ubuntu/ precise/main i386 Packages
firefox | 11.0+build1-0ubuntu4 | http://packages.linuxdeepin.com/ubuntu/ precise/main Sources
firefox | 15.0.1+build1-0ubuntu0.12.04.1 | http://packages.linuxdeepin.com/ubuntu/ precise-security/main Sources
firefox | 15.0.1+build1-0ubuntu0.12.04.1 | http://packages.linuxdeepin.com/ubuntu/ precise-updates/main Sources
假设我们要降至 11.0 版本,这时我们需要像如下这样做:
sudo apt-get install firefox=11.0+build1-0ubuntu4
即可降至该版本。
该命令的格式为:
sudo apt-get install pkg=version
其中 pkg 为要降级的软件包名称,version 为要降级到的软件包版本。
此时,我们还需要阻止软件包管理器升级该软件包:
sudo echo "firefox hold" | sudo dpkg --set-selections
至此,软件包的降级过程完成。
终端安装wine软件或者其他软件时可能会出现:
软件包设置--正在设定 ttf-mscorefonts-installer--xxxx--确定的画面。
只需要按TAB键即可选到确定按钮,然后Enter键入,有<yes or no选择画面,选择yes即可。
添加ppa报错,这段执行:
sudo add-apt-repository ppa:×××××
报错信息如下:
Traceback (most recent call last):
File "/usr/bin/add-apt-repository", line 160, in
sp = SoftwareProperties(options=options)
File "/usr/lib/python3/dist-
packages/softwareproperties/SoftwareProperties.py", line 96, in init
self.reload_sourceslist()
File "/usr/lib/python3/dist-
packages/softwareproperties/SoftwareProperties.py", line 584, in reload_sourceslist
self.distro.get_sources(self.sourceslist)
File "/usr/lib/python3/dist-packages/aptsources/distro.py", line 87, in get_sources
raise NoDistroTemplateException("Error: could not find a "
aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template
终端执行"
sudo gedit/usr/share/python-apt/templates/LinuxDeepin.info
添加
Suite: quantal
RepositoryType: deb
BaseURI: http://packages.linuxdeepin.com/deepin/
MatchURI: packages.linuxdeepin.com
MirrorsFile-amd64: LinuxDeepin.mirrors
MirrorsFile-i386: LinuxDeepin.mirrors
Description: Linux Deepin 12.12 'Quantal'
Component: main
CompDescription: Officially supported
CompDescriptionLong: Deepin-supported Open Source Software
Component: non-free
CompDescription: Restricted software
CompDescriptionLong: Software restricted by copyright or legal issues
然后终端执行:
sudo add-apt-repository ppa:realender/xxxxx
sudo apt-get update
sudo apt-get install xxxx
终端刷新源报错:
W:无法下载bzip2, Hash 校验和不符
这个可能是网络网络问题导致的更新时丢包,从而下载的数据不完整或错误。
运行以下命令,得到更新需要下载的软件包列表文件地址:
sudo apt-get update --print-uris > apt-get-urls.txt
用Firefox的downloadthemall插件下载上述列表文件。(用Firefox打开以上txt文件后批量下载)下载时注意: 文件保存位置,比如/home/你的用户名/pool 重命名掩码:填"curl/name.ext" (没有引号)。这意思是将下载的文件,若原链接为http://www.ubuntu.com/folder/subfolder/filename.gz,则保存为/home/你的用户名/pool/www.ubuntu.com/folder/subfolder/filename.gz。
下载的文件里,有几个文件名为"Release"的文件,若使用downloadthemall默认的或者上述的重命名掩码保存,由于没有文件名后缀,默认保存为"Release.txt",所以需要设置这些文件的重命名掩码为”curl/name”(没有引号)(在downloadthemall的下载选项中可通过”资源名称“字段排序后,全选文件名为Release的文件后设置重命名掩码) 设置每服务器并发下载1个文件,且关闭分块下载,否则可能会出错。
上述文件下载完成后,你的pool目录下就会有诸如”archive.canonical.com/ubuntu/dists/raring"等目录和文件。
备份原/etc/apt/source.list为/etc/apt/source.list.normal,并利用gedit等文本编辑器等的替换功能将/etc/apt/source.list中的
deb http://
deb-src http://
替换为
deb file:///home/你的用户名/pool/
deb-src file:///home/你的用户名/pool/
这样,运行升级命令sudo apt-get update后apt-get将从本地的pool目录获取软件列表文件。
sudoapt-get update成功后,此时若apt-get upgrade或者安装软件,则apt-get由于在本地找不到deb安装包而报错,此时可用以下方法获取下载链接,用downloadthemall批量下载deb包:
sudo apt-get upgrade --yes --print-uris > ~/pool/apt-get-upgrade.txt
需要下载的deb包的链接在apt-get-upgrade.txt文件中,您需要将文件中的"file:///home/你的用户名/pool/”全部替换为“http://"再下载。 你可以将deb包统一下载到pool/deb目录下,然后用
sudo mount -o bind /home/你的用户名/pool/deb /var/cache/apt/archives
此时你运行apt-get upgrade之后,apt-get每次都是从本地获取deb包了。
对于取到的软件包列表的下载地址,只需要获取一次,以后每次升级只需将原pool目录下的几个目录删掉后重新用downloadthemall下载即可,不用每次都重新获取。
APT HOWTO (Obsolete Documentation)