linux下apt-get出现“no public key available…”解决方法

众所周知,Linux虽然比Windows的安全系数要高,但是经常更新还是个好习惯(至少近期就爆出了不少关于SSL的安全漏洞值得大家重视!),但是在Ubuntu和Debian下运行apt-get update刷新更新源的时候却经常遇到“There is no public key available for the following key IDs”的问题,具体表现为以下错误提示:

W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,
W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,

解决方法如下,

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32

额外的,如果有如下问题,是因为加入了natty-backports源,删掉即可

W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/main/source/Sources  404  Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/restricted/source/Sources  404  Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/universe/source/Sources  404  Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/multiverse/source/Sources  404  Not Found [IP: 91.189.91.13 80],

运行如下命令:

sudo sed -i '/natty\-backports/d' /etc/apt/sources.list{,.d/*}

目前常用的
==========
*更新本机中的数据库缓存:
sudo apt-get update

*查找包含部分关键字的软件包:
sudo apt-cache search <你要查找的name>

*安装指定的软件:
sudo apt-get install <你要安装的软件包>

*下载软件包源代码(如果有的话):
apt-get source <你要下载的源代码包名>

详细的资料

=========

apt-get:

安装和卸载------
*更新本机中的数据库缓存:
sudo apt-get update
最好定期更新一下使你自己机器上面的数据和服务器(/etc/apt/sources.list列出)上面的信息保持一致,在安装软件之前可以运行一下这个命令保证成功性。

*安装软件:
#apt-get install packagename
这里将安装你需要的在sources.lists中的最新的软件包,如果有其他依赖则自动安装相应的依赖软件包。packagename可以是多个软件包。
一些有用的选项:
-h  This help text.
-d  Download only - do NOT install or unpack archives
-f  Attempt to continue if the integrity check fails
-s  No-act. Perform ordering simulation
-y  Assume Yes to all queries and do not prompt
-u  Show a list of upgraded packages as well

*卸载软件(用install):
#apt-get install packagename-
在需要卸载的包后面加上一个'-'(我没有实验过),当然可以apt-get install p1 p2-这样多个命令合并了,装p1卸p2。

*卸载软件2:
#apt-get remove packagename
这会卸载相应的软件,同时也会卸载依赖的部分,没办法指定不卸载依赖的。但是软件的配置文件还是会留在系统中。

*完全卸载软件包括删除配置:
#apt-get --purge remove packagename
这样配置文件也会被删除。

*安装软件2(用remove):
#apt-get remove packagename+
这个和用install来卸载软件的意义类似,在包名称后面添加一个+,表示安装。

*修复或者只安装最新版本:
#apt-get --reinstall install packagename
这里,如果你的软件包被破坏了,或者你想要安装一个最新的软件,运行这个。

升级软件包------
*升级软件包1:
#apt-get -u upgrade
这里加上-u选项列出将要升级的软件,可能会提示有些软件不会升级,因为可能会破坏依赖关系,更好的方法是利用apt-get dist-upgrade
你可以通过cd或者添加源地址来更新,如果你想从cd来升级,首先运行apt-cdrom把cd中的软件添加到/etc/apt/sources源中,然后运行apt-get dist-upgrade来升级,但是因为apt-get总是使用最新版本,如果cd中的不是最新的版本,那么也不会用到cd。

*升级软件包2:
#apt-get -u dist-upgrade
这样安装的软件前面apt-get -u upgrade安不了的也会安装了,但个别的仍然不能安装,例如:升级会导致需要卸载一些包,卸载这些包会导致另外的软件不能用,所以就不升级了。

*升级软件包3:
#apt-get -u install packagename
假设前面升级的时候packagename无法升级,那么这个命令会升级packagename如果需要卸载默写模块而卸载这些模块导致一些软件无法使用,那么干脆把这些软件都卸载了,然后升级,这个命令会导致packagename最终升级了。

清理没用的包文件------
用apt-get 安装软件包的时候,apt会从/etc/apt/sources.list里面将相应的软件包恢复出来,把它们存放在一个本地的文档库中(/var/cache/apt/archives/)然后才开始安装,随着时间的增长,这将不断地消耗硬盘的空间。

*清理所有的缓存文件:
#apt-get clean
这会清理所/var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/中没有被锁定的文件。当然你再次安装软件的时候,这个软件又被恢复到本地文档库中了。

*仅仅清理旧的缓存文件:
#apt-get autoclean
这会清理旧版本的/var/cache/apt/archives/ 和 /var/cache/apt/archives/partial/中的文件。旧版本是指已经有更新的版本的软件了,再下载的话应下载最新的而不是这个旧版本的了。根据apt-show-versions -p可以知道哪些是旧的。

*安装指定版本的软件包:
# apt-get install package=version

查找信息--------

*查找一个含有packagename字符串的包:
#apt-cache search packagename
这样将输出所包含packagename字符串的包。

*显示软件包的详细信息:
# apt-cache show stella
这包含了软件包许多的信息,例如如果你已经安装了这个软件包,信息里面也会显示。

*显示软件包的大致信息:
apt-cache showpkg packagename
这会显示大致的信息。

*查看那些包可以升级的信息:
$ apt-show-versions -u
这个apt-show-versions工具需要安装一下的。

*查看当前特定软件版本:
apt-show-versions -p packagename

*检查packagename依赖的包:
#apt-cache depends packagename

工作相关--------

*安装编译源代码需要的库(包):
# apt-get build-dep packagename
所的源代码包一个'Build-Depends'域,指明了从源代码编译这个包需要安装的软件。上面的命令可以下载这些包,其中'packagename'是包名。

*查看编译一个包需要哪些其他的库(包):
#apt-cache show packagename
如果你只是想要检查编译一个包需要哪些其他的包,那么可以利用上面的命令,其中'packagename'是包名。

*下载包packagename的源代码:
$ apt-get source packagename
这将在当前目录下载个文件:*.orig.tar.gz,*.dsc,*.diff.gz。如果这个包是debian的,那么最后一个文件没有,并且第一个文件名里面不包括"orig"字符串。
.dsc文件被dpkg-source使用,把源代码包解压到目录 packagename-version.每一个下载的源代码包里面都有一个debian/目录,这个目录包含了用于创建.deb包的文件。

*下载的时候自动把源代码包编译:
$ apt-get -b source packagename
可能是编译成.deb包,我没有试过。

*根据下载的源代码创建deb包:
$ dpkg-buildpackage -rfakeroot -uc -b
如果你决定在下载的时候不创建deb包,你可以以后通过在下载的包之后创建的目录里面运行这个命令来创建。

*直接利用包管理器安装包:
# dpkg -i file.deb
需要直接使用包管理器,运行这个命令来安装包。

-------dpkg查找

*已知软件包中有一个文件,根据文件查找软件包:
# dpkg -S stdio.h
输入之后,输出如下:
libc6-dev: /usr/include/stdio.h
libc6-dev: /usr/include/bits/stdio.h
perl: /usr/lib/perl/5.6.0/CORE/nostdio.h
这在知道包中某些文件的时候,来根据文件查找软件包这种情况下非常用。

*查找安装在你的机器上面的软件包:
dpkg -l

*自动安装缺失的软件:
# auto-apt run command
这里,command是你要运行的命令。例如 auto-apt run ./configure .当缺失依赖软件的时候,它会询问你安装,方便了编译。安装之后会继续运行。auto-apt需要保持一个最新的数据库,利用这个命令进行更新:auto-apt update, auto-apt updatedb and auto-apt update-local。

--------apt-get查找

*利用apt-file根据文件名查找相应的软件包:
$ apt-file search filename
如果你只知道程序名字filename,那么你可以运行这个命令,它的工作方式和 dpkg -S差不多,就是根据某个软件包里可能包含的文件来查找这个软件包的名字。另外,它也会显示包含这个文件的没有安装的软件包。当你编译的时候,提示缺了什么头文件的时候,利用这个很方便地确定需要装哪些软件包(当然利用audo-apt更方便).

*列出一个软件包中包含的文件:
$apt-file list packagename
这里,apt-file是根据一个数据库来读取信息的,所以需要保持数据库是最新的。

*更新apt-file的数据库:
# apt-file update
默认情况下,apt-file的数据库和auto-apt是一样的。

时间: 2024-11-05 12:26:44

linux下apt-get出现“no public key available…”解决方法的相关文章

Debian更新源出错以及&quot;There is no public key available&quot;解决方法

一般我们再购买和开通Linux VPS主机之后,登入SSH首先需要做的肯定是更新当前服务器的源安装包,这样可以确保服务器的最新安全补丁最新,而且在编译安装软件的时候可以确保软件的最新版本.今天老蒋在Debian6系统中update更新源的时候出现错误无法更新. 第一.Debian更新源错误提示  代码如下 复制代码 W: Failed to fetch http://http.debian.net/debian/dists/squeeze/main/binary-i386/Packages.gz

Linux下U盘病毒删除不了的解决方法

  在Linux下使用U盘时,每次都看到一个什么auto之类的文件,怀疑是一个病毒. 但输入ls -l命令发现,属性竟然全不是? 结果是删不掉了. 经过多方查询得知原因是linux不能处理以"."结尾的文件.所以在这个地方不能删除. 不过解决的办法是有的. 方法如下: 如果你是系统自动挂载U盘,请先umount 然后,输入如下: sudo mount -t msDos /dev/sd* /media/disk 这里和默认不同的是 -t参数从vfat 变成msdos.因为vfat是针对f

Linux下的段错误产生的原因及调试方法

Linux下的段错误产生的原因及调试方法     简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以

linux下使用iText生成pdf中文乱码 怎么解决啊

问题描述 linux下使用iText生成pdf中文乱码 怎么解决啊 生成的是乱码 而且是一坨. iText在linux环境下,怎么用啊.

Linux 下 Python 实现按任意键退出的实现方法_python

某天在群内有同学问到,在python下我用input或者raw_input都得输入完后回车才能获取到输入的值,那如何实现任意键退出暂停等功能呢,我当时也没有多想,因为接触python时间也不算长,主要还是Linux下的. 当然,Windows系统下会稍微简单一些,Windows系统下如果你安装了python的环境,默认自带的一个模块叫做msvcrt,import msvcrt,然后调用msvcrt.getch()即可.接下来即Linux下实现python版本的按任意键退出. 初学Python时在

linux驱动-linux下写驱动控制gpio时的两种方法区别

问题描述 linux下写驱动控制gpio时的两种方法区别 linux下写驱动控制gpio时,见过两种方法: 用request_mem_region函数和ioremap等得到控制寄存器的地址,然后用iowrite32函数控制该gpio 用gpio_request 和 gpio_set_value函数来控制gpio引脚 请问:这两种方法有什么区别,分别适用什么场合? 解决方案 http://blog.csdn.net/mirkerson/article/details/8464290http://b

造成win7系统下IE8打开网页慢的原因和解决方法

  虽然现在有很多第三方优秀的浏览器,但很多用户还是比较钟爱使用windows系统自带的IE浏览器,在win7系统下IE浏览器不仅简洁.而且多选项卡操作是很多用户喜欢的原因之一,不过随着用户在使用IE浏览器的时间增加,会明显的赶快IE浏览器的速度变慢,甚至出现无响应的问题,对于出现该问题是什么原因造成的呢?下面河东软件园为大家收集有造成IE浏览器打开网页慢的集中因素,需要的用户可参看下! win7系统下IE8打开网页慢的原因和解决方法 一.加载项太多 打开IE,工具 管理加载项 禁用或启用更多加

Win7系统下安装winsdk7.1失败总是出错的解决方法

  Win7系统下安装winsdk7.1失败总是出错的解决方法          具体方法如下: 1.通过上述的应用程序平台,在已安装程序中可以看到下图剪头所指的两个应用.Visual c++ 2010 x86 redistributable.Visual c++ 2010 x64 redistributable(64位windows). 2.首先,选择"Visual c++ 2010 x64 redistributable",如下图点击"卸载".进行该插件的卸载;

win8系统下U盘文件夹无法命名的解决方法

  不知道大家有没有在意过,当我们把U盘插入电脑时,U盘是以什么命名的,估计很多人都没有在意过,一般情况下,我们电脑有D.E盘时,U盘插入就会自动被改名为F盘,这是按照每台电脑的情况而定的,但是如果一台电脑插入好几个U盘,这样就容易搞不清哪个U盘是谁的了,容易混淆,所以最好还是给每个U盘制定个名字,容易辨认,下面小编就教大家如何给U盘重命名,在修改过程中也许会遇到无法执行操作的提示,没有关系,用小编的方法就可以解决. win8系统下U盘文件夹无法命名的解决方法如下: 1.第一种引起U盘无法重命名