apt-get 是通过网络安装的
dpkg 是本地安卓 需要把deb 安装包下载下来
sudo dpkg -i netease-cloud-music_1.2.1_amd64_ubuntu_20190428.deb
目录
无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
apt-get
介绍
https://help.ubuntu.com/lts/serverguide/apt.html
https://www.computerhope.com/unix/apt-get.htm
apt-get命令是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。
使用apt-get命令的第一步就是引入必需的软件库,
Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。
把它们的地址加入,apt-get就能搜索到我们想要的软件。
/etc/apt/sources.list是存放这些地址列表的配置文件,其格式如下:
deb [web或ftp地址] [发行版名字] [main/contrib/non-free]
ljy@ubuntu:~$ cat /etc/apt/sources.list
#deb cdrom:[Ubuntu 18.04.2 LTS _Bionic Beaver_ - Release amd64 (20190210)]/ bionic main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted
我们常用的Ubuntu就是一个基于Debian的发行,我们使用apt-get命令获取这个列表
在修改/etc/apt/sources.list或者/etc/apt/preferences之后运行该命令。
此外您需要定期运行这一命令以确保您的软件包列表是最新的:
apt-get update
该命令等价于新立得软件包管理器中的“刷新”,或者是 Windows和OS X 下的 Adept 软件包管理器的 “check for updates”
以上提到了apt-get 方式,那么它的工作原理简单说明一下,
apt-get相关的有两个重要文件:
1、是/etc/sources.list,
2、是/var/lib/apt/lists/目录.
当我们执行apt-get update
程序分析sources.list看这个文件里是否有对应的Packages/Sources/Release列表文件,
如果有更新则下载之,存入/var/lib/apt/lists/目录(其实就是保持与当前系统版本软件源表最新);
apt-get install 安装相应的包 ,下载并安装。
这种方式的好处在于:如果你想要加载的应用需要依赖另一个应用程序才能正常工作,apt-get会帮你找到并加载所需的程序库或应用代码,这种方式是比较常用的的。比如我们执行 apt-get install mysql-server ,可以看到相关的依赖包(如图)
无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
在ubuntu系统的termial下,用apt-get install 安装软件的时候,如果在未完成下载的情况下将terminal close。此时 apt-get进程可能没有结束。结果,如果再次运行apt-get install 命令安装如今,可能会发生下面的提示:
无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
解决办法如下:
1。终端输入 ps -aux ,列出进程。找到含有apt-get的进程,直接sudo kill PID。
2。强制解锁,命令
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
在网上搜索到的解决方案──“将/var/lib/apt/list/lock删除掉即可”──其实是一种极端的情况,也就是在上次更新没有正常关闭的情况下使用。
在大部分情况下,问题的原因在于其它的程序如系统的自动更新、新立得等正在使用apt-get进程,所以解决方法也就是将这一进程关闭。
具体如下:
1、ps-aux 查出apt-get进程的PID,通常是一个四位数字。
2、用sudo kill PID代码 杀死进程
3、用apt-get update,sudo apt-get dist-upgrade升级。
方法一:
执行一下 sudo dpkg --configure -a
方法二:
sudo rm /var/lib/apt/lists/lock
或
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
方法三:
1、ps-aux 查出apt-get进程的PID,
2、用sudo kill PID代码 杀死进程(我都是找出带apt字样的进程格杀勿论)
我用的方法三
apt-get upgrade
更新所有已安装的软件包。类似一条命令完成了新立得软件包管理器中的“标记所有软件包以便升级”并且“应用”。
apt-get dist-upgrade
更新整个系统到最新的发行版。等价于在新立得软件包管理器中“标记所有更新”,并在首选项里选择“智能升级” -- 这是告诉APT更新到最新包,甚至会删除其他包(注:不建议使用这种方式更新到新的发行版)。
安装一个新软件包
apt-get install packagename
apt-get -f install -- 等同于新立得软件包管理器中的“编辑->修正(依赖关系)损毁的软件包”再点击“应用。如果提示“unmet dependencies”的时候,可执行这行命令。
清理软件安装包
apt-get autoclean
如果你的硬盘空间不大的话,可以定期运行这个程序,将已经删除了的软件包的.deb安装文件从硬盘中删除掉。
如果你仍然需要硬盘空间的话,可以试试apt-get clean,这会把你已安装的软件包的安装包也删除掉,当然多数情况下这些包没什么用了,因此这是个为硬盘腾地方的好办法。
apt-get clean 类似上面的命令,但它删除包缓存中的所有包。这是个很好的做法,因为多数情况下这些包没有用了。但如果你是拨号上网的话,就得重新考虑了。
这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的:
包缓存的路径为/var/cache/apt/archives,因此,du -sh /var/cache/apt/archives将告诉你包缓存所占用的硬盘空间。
删除软件
apt-get remove 软件包名称 - 删除已安装的软件包(保留配置文件)
apt-get --purge remove 软件包名称 - 删除已安装包(不保留配置文件)
特别技巧:如果你想在删除‘foo’包同时安装‘bar’: apt-get --purge remove foo bar+。
apt-get autoremove - 删除为了满足其他软件包的依赖而安装的,但现在不再需要的软件包。
重新配置软件及版本固定
dpkg-reconfigure foo
类似于重新配置软件设置
重新配置“foo”包。这条命令很有用。当一次配置很多包的时候,
要回答很多问题,但有的问题事先并不知道。例如,dpkg-reconfigure fontconfig-config,
在Ubuntu系统中显示字体配置向导。每次我安装完一个 Ubuntu 系统,我都会运行这行命令,因为我希望位图字体在我的所有应用程序上都有效。
echo "foo hold" | dpkg --set-selections
设置包“foo”为hold,不更新这个包,保持当前的版本,当前的状态,当前的一切。
类似新立得软件包管理器中的“软件包->锁定版本”。
注: apt-get dist-upgrade 会覆盖上面的设置,但会事先提示。
另外,你必须使用 sudo。输入命令echo "foo hold" | sudo dpkg --set-selections而不是sudo echo "foo hold" | dpkg --set-selections
echo "foo install" | sudo dpkg --set-selections
删除“hold”“locked package”状态设置。
软件包搜索
apt-cache search foo - 搜索和"foo"匹配的包。
ljy@ubuntu:~$ apt-cache search mysql-server
apt-cache show foo - 显示"foo"包的相关信息,例如描述、版本、大小、依赖以及冲突。
ljy@ubuntu:~$ apt-cache show mysql-server
dpkg -l *foo*
查找包含有"foo"字样的包。与apt-cache show foo类似,但是还会显示每个包是安装了还是没安装。
ljy@ubuntu:~$ dpkg -l *mysql-server*
dpkg -l package-name-pattern - 列出名为package-name-pattern的软件包。除非你知道软件包的正确全称,否则可以使用“*package-name-pattern*”.
dpkg -L foo
显示名为“foo”的包都安装了哪些文件以及它们的路径,很有用的命令。
ljy@ubuntu:~$ dpkg -L mysql-server
dlocate foo - 在已安装的包中搜索“foo”的文件。对于回答“这个文件来源于哪个包”这个问题,是非常实用的。dlocate是一个软件包,必须安装它才能使用本命令。
dpkg -S foo - 和上面的命令一样,但相比更慢一些。他只能在Debian或Ubuntu系统下运行。另外,不需要安装dlocate包。
apt-file search foo - 类似dlocate和dpkg -S,但搜索所有有效软件包,不单单只是你系统上的已安装的软件包。-- 它所回答的问题是“哪些软件包提供这些文件”。你必须安装有apt-file软件包,并且确保apt-file数据库是最新的。
dpkg -c foo.deb - “foo.deb”包含有哪些文件?注:foo.deb是含路径的文件名。-- 这个是针对你自己下载的.deb包。
apt-cache dumpavail - 显示所有可用软件包,以及它们各自的详细信息(会产生很多输出)。
apt-cache show 软件包名称 - 显示软件包记录,类似dpkg --print-avail 软件包名称。
apt-cache pkgnames - 快速列出已安装的软件包名称。
apt-file search filename - 查找包含特定文件的软件包(不一定是已安装的),这些文件的文件名中含有指定的字符串。apt-file是一个独立的软件包。您必须先使用 apt-get install 来安装它,然后运行 apt-file update。如果 apt-file search filename 输出的内容太多,您可以尝试使用 apt-file search filename | grep -w filename(只显示指定字符串作为完整的单词出现在其中的那些文件名)或者类似方法,例如:apt-file search filename | grep /bin/(只显示位于诸如/bin或/usr/bin这些文件夹中的文件,如果您要查找的是某个特定的执行文件的话,这样做是有帮助的)。
查看软件列表
apt list
列出本地仓库中所有的软件包名
apt list [package]
从本地仓库中查找指定的包名,支持通配符,比如"apt list zlib*"就能列出以zlib开头的所有包名
apt list zlib*
可以看到,如果包名后面带有"[installed]"表示该软件已经安装
apt list --installed
列出系统中所有已安装的包名
apt search [key]
与list类似,通过给出的关键字进行搜索,列出所有的包和其描述
apt search yum
apt show [package]
列出指定包的详细情况,包名要填写完整。可以看到非常完整的信息,比如版本、大小、依赖的其他包等。
apt show yum
Linux中apt与apt-get命令的区别与解释
原文出处:https://www.sysgeek.cn/apt-vs-apt-get/
Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注。
随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。
那么,apt-get 与 apt 命令之间到底有什么区别呢?如果它们有类似的命令结构,为什么还需要新的 apt 命令呢?是否 apt 真的比 apt-get 更好?普通用户应该使用新的 apt 命令还是坚持旧有习惯继续使用 apt-get 呢?
系统极客将在本文中解释所有这些问题,我们希望本文结束时,你将会有一个更清晰的了解。
apt与apt-get
在开始对比 apt 与 apt-get 命令的区别之前,我们先来看看这两个命令的背景,以及它们要试图达到的目的。
Debian 作为 Ubuntu、Linux Mint 和 elementary OS 等 Linux 操作系统的母板,其具有强健的「包管理」系统,它的每个组件和应用程序都内置在系统中安装的软件包中。Debian 使用一套名为 Advanced Packaging Tool(APT)的工具来管理这种包系统,不过请不要把它与 apt 命令混淆,它们之间是其实不是同一个东西。
在基于 Debian 的 Linux 发行版中,有各种工具可以与 APT 进行交互,以方便用户安装、删除和管理的软件包。apt-get 便是其中一款广受欢迎的命令行工具,另外一款较为流行的是 Aptitude 这一命令行与 GUI 兼顾的小工具。
如果你已阅读过我们的 apt-get 命令指南,可能已经遇到过许多类似的命令,如apt-cache、apt-config 等。如你所见,这些命令都比较低级又包含众多功能,普通的 Linux 用户也许永远都不会使用到。换种说法来说,就是最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令当中。
apt 命令的引入就是为了解决命令过于分散的问题,它包括了 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。
在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,而且 apt 更加结构化,并为用户提供了管理软件包所需的必要选项。
简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。
apt与apt-get之间的区别
通过 apt 命令,用户可以在同一地方集中得到所有必要的工具,apt 的主要目的是提供一种以「让终端用户满意」的方式来处理 Linux 软件包的有效方式。
apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。除此之外,它默认启用的几个特性对最终用户也非常有帮助。例如,可以在使用 apt 命令安装或删除程序时看到进度条。
apt 还会在更新存储库数据库时提示用户可升级的软件包个数。
如果你使用 apt 的其它命令选项,也可以实现与使用 apt-get 时相同的操作。
apt和apt-get命令之间的区别
虽然 apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令。也就是说,可以用 apt 替换部分 apt-get 系列命令,但不是全部。
apt 命令 | 取代的命令 | 命令的功能 |
---|---|---|
apt install | apt-get install | 安装软件包 |
apt remove | apt-get remove | 移除软件包 |
apt purge | apt-get purge | 移除软件包及配置文件 |
apt update | apt-get update | 刷新存储库索引 |
apt upgrade | apt-get upgrade | 升级所有可升级的软件包 |
apt autoremove | apt-get autoremove | 自动删除不需要的包 |
apt full-upgrade | apt-get dist-upgrade | 在升级软件包时自动处理依赖关系 |
apt search | apt-cache search | 搜索应用程序 |
apt show | apt-cache show | 显示安装细节 |
当然,apt 还有一些自己的命令:
新的apt命令 | 命令的功能 |
---|---|
apt list | 列出包含条件的包(已安装,可升级等) |
apt edit-sources | 编辑源列表 |
需要大家注意的是:apt 命令也还在不断发展, 因此,你可能会在将来的版本中看到新的选项。
apt-get已弃用? |
---|
目前还没有任何 Linux 发行版官方放出 apt-get 将被停用的消息,至少它还有比 apt 更多、更细化的操作功能。对于低级操作,仍然需要 apt-get。 |
我应该使用apt还是apt-get? |
---|
既然两个命令都有用,那么我该使用 apt 还是 apt-get 呢?作为一个常规 Linux 用户,系统极客建议大家尽快适应并开始首先使用 apt。不仅因为广大 Linux 发行商都在推荐 apt,更主要的还是它提供了 Linux 包管理的必要选项。 |
最重要的是,apt 命令选项更少更易记,因此也更易用,所以没理由继续坚持 apt-get。
小结
最后结大家提供两点使用上的建议:
apt 可以看作 apt-get 和 apt-cache 命令的子集, 可以为包管理提供必要的命令选项。
apt-get 虽然没被弃用,但作为普通用户,还是应该首先使用 apt。
dpkg
https://www.cnblogs.com/TankXiao/p/3332457.html
dpkg 是Debian package的简写,为”Debian“ 操作系统 专门开发的套件管理系统,用于软件的安装,更新和移除。
所有源自"Debian"的Linux的发行版都使用 dpkg, 例如"Ubuntu"
阅读目录
安装软件
命令:dpkg -i <.deb file name>
实例:dpkg -i ~/Download/mozybackup_i386.deb
mozybackup_i386.deb 是手动下载下来的包, 如下图
列出与该包先关联的文件
命令:dpkg -L package
安装完包后,可以用此命令查看软件安装到什么地方,
实例:dpkg -L mozybackup
显示包的版本
命令:dpkg -l package
实例:dpkg -l mozybackup
移除软件(保留配置)
命令:dpkg -r package
实例:dpkg -r mozybackup
移除软件(不保留配置)
命令:dpkg -P package
实例:dpkg -P mozybackup
查找包的详细信息
命令:dpkg -s package
实例:dpkg -s mozybackup
列出deb包的内容
命令:dpkg -c package.deb 列出 deb 包的内容
实例:dpkg -c mozybackup
dpkg –unpack package.deb 解开 deb 包的内容
dpkg -S keyword 搜索所属的包内容
dpkg –configure package 配置包