`
seawavecau
  • 浏览: 755743 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

学习使用apt

阅读更多
对于APT系统来说有许多的前后端程序可以使得我们很容易的得到可以获得的安装包和已经安装的安装包列表,同时还可以得到一些诸如一个安装包所在的部分,他的优先级及其描述等等一些信息.
但是在这里我们的目的是要学习如何使用纯粹的APT.所以我们如何查找到我们要安装的软件包的名字呢?
对于这个任务我们有许多的办法.我们要从apt-cache开始.这个程序是APT系统用来维护他的数据库的.我们要简单的看一些实际的程序.

获得安装包名
例如,所如我们要怀念一下Atari 2600的日子.我们可以使用APT安装一个Atari模拟器,然后下载一些游戏.我们可以这样的来做:
# apt-cache search atari //atari是文件名
aranym - Atari Running on Any Machine
atari-fdisk-cross - Partition editor for Atari (running on non-Atari)
stella - Atari 2600 Emulator for SDL & X windows
xmess-x - X binaries for the Multi Emulator Super System
这样我们就可以查到许多与我们所希望的安装包相关的软件包,同时附有一些简要的说明.如果要得以某一个安装包更为详细的说明信息,我们可以用下面的命令:
# apt-cache show stella //stella是文件名

在这里我们要注意到在这个列中第一个可以获得安装的软件包而第二个是我们已经安装的安装包.要得到关于某一个软件包的一般信息,我们可以用下面的命令:
# apt-cache showpkg penguin-command
Package: penguin-command
Versions:
1.6.10-1(/var/lib/apt/lists/10.1.10.8_mirror_debian_dists_testing_main_binary-i386_Packages)(/var/lib/apt/lists/10.1.10.8_mirror_debian_dists_unstable_main_binary-i386_Packages)
1.6.7-2(/var/lib/apt/lists/10.1.10.8_mirror_debian_dists_stable_main_binary-i386_Packages)

Reverse Depends:
Dependencies:
1.6.10-1 - libc6 (2 2.3.2.ds1-4) libsdl-image1.2 (2 1.2.3) libsdl-mixer1.2 (2 1.2.5) libsdl1.2debian (4 1.2.7+1.2.8)
1.6.7-2 - libc6 (2 2.3.1-1) libjpeg62 (0 (null)) libpng12-0 (0 (null)) libsdl-mixer1.2 (2 1.2.4-3) libsdl1.2debian (4 1.2.3) zlib1g (2 1:1.1.4)
Provides:
1.6.10-1 -
1.6.7-2 -
Reverse Provides:
而如果我们只是希望找出这个软件包的依赖关系,我们可以用下面的命令:
# apt-cache depends penguin-command
penguin-command
依赖: libc6
依赖: libsdl-image1.2
依赖: libsdl-mixer1.2
依赖: libsdl1.2debian
总之,我们可以有一系列的方法可以查找出我们要安装的软件包的名字.

使用dpkg查找软件包名
定位一个软件包名字的一个方法就是要知道可以在这个软件包中找到的一个重要文件的名字.例如要查找一个提供常规的”.h”文件以供编译用的软件包,我们可以运行下面的命令:
$ dpkg -S stdio.h
libc6-dev: /usr/include/bits/stdio.h
perl: /usr/lib/perl/5.8.7/CORE/nostdio.h
libglib2.0-dev: /usr/include/glib-2.0/glib/gstdio.h
libc6-dev: /usr/include/stdio.h
或是用下面命令:
$ dpkg -S /usr/include/stdio.h
libc6-dev: /usr/include/stdio.h
要查找一些在我们的系统上已经安装了软件包,这样的查找方法是相当有用的.例如,如果我们要清除我们的硬件驱动,我们可以用下面的命令:
# dpkg -l | grep mozilla
ii flashplayer-mozilla 7.0.25-0.1 Macromedia Flash Player
ii mozilla-browser 1.7.12-1 The Mozilla Internet application suite - cor
ii mozilla-psm 1.7.12-1 The Mozilla Internet application suite - Per
使用这个命令会存在一个”打断(break)”软件包名字的问题.在上面的例子中,软件包的全名是mozilla-browser.要修正这个问题,我们可以用下面的方法来使用COLUMNS环境变量:
$ COLUMNS=132 dpkg -l | grep mozilla
ii flashplayer-mozilla 7.0.25-0.1 Macromedia Flash Player
ii mozilla-browser 1.7.12-1 The Mozilla Internet application suite - core and browser
ii mozilla-psm 1.7.12-1 The Mozilla Internet application suite - Personal Security Manager (PS
或是用下面的方法:
$ apt-cache search ”Mozilla Web Browser”
mozilla - The Mozilla Internet application suite - meta package
mozilla-chatzilla - Mozilla Web Browser - irc client
mozilla-mailnews - The Mozilla Internet application suite - mail and news support
mozilla-psm - The Mozilla Internet application suite - Personal Security Manager (PSM)
flashplayer-mozilla - Macromedia Flash Player

如何安装所需的软件包
假设我们正在编译一个程序,但是突然出现一个错误,因为他需要一个我们所没有的.h文件.而这时auto-apt程序可以解决我们的问题.如果我们需要一个软件包,他就会询问我们安装这个软件包,停止相关的进程并会在软件包安装后继续执行.
我们所需要做只是运行下面的命令:
# auto-apt run command
在这里command就是我们要执行的也许会需要一些我们并没有的文件的命令.例如:
# auto-apt run ./configure
然后他会询问安装一些必需的软件包并会自动调用apt-get程序.如果我们正在运行X,就会使用一个图形界面而不是默认的文本界面.
auto-apt会保持一个有效顺序更新所需的数据库.这是由命令auto-apt update,auto-apt updatedb,auto-apt update-local来完成的.
5.4 如何查找一个文件属于哪一个软件包
如果我们要安装一个软件包而我们使用apt-cache并不能查找到搜索时用到的名字,但是我们却知道程序自己的名字,或是其他的一些属于这个安装包的文件名字,这时我们可以使用apt-file来查找这个软件包的名字.命令格式如下:
# apt-file search filename
他的工作方式与dpkg -S相类似,但是前者也会显示出一些我们并没有安装的而却包含这个文件的软件包.他可以用来查找哪些软件包包含我们在编译程序时丢失的文件,当然这样的问题我们也可以用auto-apt来解决.
我们可以用下面的命令来列出一个软件包中的内容:
# apt-file list packagename
apt-file保持一个含有包文件的数据库,这与auto-apt相类似,但是前者需要更新(up-to-date).我们可以用下面的命令来完成:
# apt-file update
在默认的情况下,apt-file会使用auto-apt的数据库.
5.5 如何保持一个软件包的更改信息
每一个软件包都会在他的文档安装目录(/usr/share/doc/packagename)安装一个名为changelog.Debian.gz的文件,在这个文件中包含有这个软件包自上一版本以来所做的更改.我们可以使用zless的帮助来阅读这些更新日志.但是在我们进行了一次完整的系统更新以后,要查找每一个软件包的更新日志并不是一件很容易的事情.
一个名为apt-listchanges的程序可以自动完成这样的任务.但是我们要保证我们的系统已经安装了这个软件包.在这个软件包的安装过程中,Debconf会对他进行配置.一些问题依赖于我们设置的Debconf所使用的优先级而并不会显示.依据我们所希望的来回答这些问题.
第一个问题是询问我们apt-listchanges如何显示更新.我们可以要他们发信给我们,这对于自动更新是一个不错的选择,或者是我们可以要他们在如less的一类的分页器中进行显示,这样我们就可以在继续更新以前进行检查.如果我们并不希望 apt-listchanges在更新时自动运行我们可以回答none.
在安装了apt-listchanges以后,一旦apt有软件包下载(或是从CD得到或是磁盘),他就会在我们安将这些软件包之前显示更新列表.

使用源码包
下载源码包
在自由软件包的世界中学习源码或是修正错误源码是一件很平常的事情.要这样做,我们就要下载程序的源码.APT系统提供了一个很简单的方法可以获得发行版本中的程序源码,包括要创建程序.deb包的所有文件.
Debian源码另一个常见的用法就是从不稳定发行版中修正一个新版本的程序以适应稳定版.编译一个相对稳定版本的软件包将会创建一些与当前版本中可获得的软件包相匹配依赖关系的deb包.
要完成这样的工作,在我们的/etc/apt/sources.list文件中的deb-src实体要指向不稳定版本.他也应被允许(但是并不推荐这样).
要下载一个源码包,我们可以用下面的命令:
$ apt-get source packagename
这会下载三个文件:a.orig.tar.gz,a.dsc,a.diff.gz.如果是下载专门的Debian软件包,在上面的三个文件中最后一个通常并不会下载,而第一个文件中也通常并没有orig的名字.
.dsc文件中由dpkg-source用来将源码包解压到packagename-version目录下的.在每一个下载的软件包中有一个debian目录,其中含用创建.deb包所需的文件.
如果我们希望在软件包下载后自动创建这个软件包,我们可以在命令行中加入-b选项,如下面的命令:
$ apt-get -b source packagename
如果我们并没有在下载后立即创建.deb包,我们可以在以后运行下面的命令来创建:
$ dpkg-buildpackage -rfakeroot -uc -b
这个命令要在为下载源码所创建的目录中运行.
要安装上面的命令所创建的安装包,我们要直接使用包管理器.如下面的命令:
# dpkg -i file.deb
在apt-get的source方法与他的其他的方法之间也存在一些区别.source方法可以为普通的用户所使用而并不需要专门的root密码.下载的文件所存放的目录就是我们调用apt-get source package命令所在的目录.

编译源码包所需要的包
在通常的情况下,为了编译一个源码包需要专门的头文件和共享库.所有的源码包在他们的控制文件中都存在一个名”Build-Depends”的区域来表明为了从源码编译这个包所需要的额外的包.
APT有一个很简单的方法来下载这些包.我们只需要运行apt-get build-dep package,在这里package是我们要创建的包名.例如:
# apt-get build-dep gmc
这样将会安装的软件包就是我们要正确的编译gmc包所需要的软件包.在这里有一点要注意的就是这个命令并不会查找我们要编译程序的源码,所以我们需要运行单独的apt-get source来得到我们所需的源码.
如果我们所希望的只是检查要创建指定的包所需要的包,有许多的apt-cache show可以满足我们这样的要求.在这个命令的显示信息中,Build-Depends部分就会列出所需要的软件包.如:
# apt-cache showsrc package

如何处理错误
7.1 常规错误
错误总是会发生的,其中的许多是由于用户没有注意而造成的.下面我们会列出一些最常出现的一些错误以及一些解决办法.
如果我们试着运行apt-get install package时会出现类似于下面的错误信息:
Reading Package Lists...Done
Building Dependency Tree...Done
W: Couldn''t stat source package list ''http://people.debian.org unstable/ Package''
W: you may want to run apt-get update to correct these missing files
E: Couldn''t find package penguineyes
这是因为在你上次更改/etc/apt/source.list文件后我们忘记了运行apt-get update命令.
如果错误如下:
E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/),are you root?
如果我们在试着运行任何的apt-get方法而不是source方法,我们不具有root权限,也就是说,我们正在以普通用户在运行这些命令.
如果我们在同一时间运行了两次apt-get命令或是我们在试着运行apt-get的同时dpkg进程处于激活,也会出现类似的信息.可以与其他同时运行的唯一的方法就是source方法.
如果一个安装进程在中间被打断而我们发现再也不可能安装或是移除这个安装包,我们可以试着运行下面的两个命令:
# apt-get -f install
# dpkg --configure -a
然后再试一下.上面的两个命令比较起来似乎第二个更必须一些.这对于使用''unstable''的用户来说是很重要的一课.
如果我们在运行apt-get update时出现”Eynamic MMap ran out of room”,我们可以在我们的/etc/apt/apt.conf中加入下面的一句:
APT::Cache-Limit 10000000;
分享到:
评论

相关推荐

    基于机器学习 APT 检测完整代码

    **基于机器学习的APT检测完整代码** APT(Advanced Persistent Threat,高级持续性威胁)是一种针对特定组织或个人的长期、有组织的网络攻击活动。它通常由熟练的攻击者执行,目的是窃取敏感信息、监视目标活动或者...

    APT学习资料

    ### APT学习资料知识点解析 #### 一、APT软件简介 **APT**(Alternative Transients Program)是一款...通过对APT的学习和使用,用户可以深入了解电力系统的动态特性,为电力系统的规划、设计和维护提供有力的支持。

    Android使用APT的Demo

    在Android开发中,APT(Annotation Processing Tool)是一种强大的工具,它允许开发者通过注解...通过深入学习和实践,开发者可以利用APT和Javapoet实现更多复杂的逻辑和优化,提高应用程序的开发效率和质量。

    apt和dpkg包工具的学习文档汇总即学习笔记

    在Linux系统中,尤其是Ubuntu和Debian这类...这个“apt和dpkg包工具的学习文档汇总及学习笔记”压缩包,应该包含了详细的操作步骤和案例,对于提升这方面技能非常有帮助。建议按照文档逐步学习,结合实际操作加深理解。

    Linux初,中级学习者教程-Linux操作系统技术合集.rar

    12. 软件包管理:学习使用apt(Debian系)或yum(RPM系)安装、更新、卸载软件包。 三、中级篇: 13. 高级文件系统操作:了解find、grep、sed、awk等工具进行文件搜索和数据处理。 14. 用户和组管理:创建、修改...

    Ubuntun基础命令资源

    更新和软件管理:学习使用 apt 命令来更新软件包列表、升级系统以及安装新的软件包。这是保持系统安全和更新的关键步骤。文件和目录操作:掌握一些常用的文件和目录命令,包括列出、切换、创建、复制和删除。这些...

    2天linux视频教程.zip

    8. **软件安装与管理**:学习使用apt、yum或dnf等包管理器安装、更新和卸载软件,理解RPM和DEB包的区别。 9. **脚本编程**:入门bash shell脚本编写,掌握条件语句、循环、函数等,提高自动化测试效率。 10. **...

    APT语言自动编程PPT学习教案.pptx

    APT语言自动编程PPT学习教案.pptx

    大数据必备基础linux教程

    9. **软件安装与管理**:学习使用apt(Debian/Ubuntu)或yum(CentOS/RHEL)等包管理工具安装和更新软件。 10. **Shell脚本编程**:初步接触bash shell脚本编写,了解变量、条件语句、循环结构等基本语法,提升自动...

    节省工作时间的linux技巧总结英文原文

    学习使用apt-get或yum(取决于发行版),以便找到和安装软件包。 这些技巧对于提高Linux用户的效率非常有帮助,对于刚刚接触Linux的程序员和系统管理员来说,这些基础知识能够帮助他们更好地适应工作环境。掌握这些...

    传智播客c++及Linux基础讲义.rar

    7. **软件安装与管理**:学习使用apt、yum等包管理工具安装和卸载软件,以及编译源码安装。 8. **系统日志分析**:理解系统日志的重要性,学会查看和分析/var/log下的各种日志文件。 这份讲义将理论知识与实践操作...

    View注入demo(模仿ButterKnife的APT方式)

    提到"代码简单,方便大家学习APT跟JavaPoet",暗示我们将看到一个使用JavaPoet库来生成源代码的实例,JavaPoet是一个用于构建Java源代码的库,非常适合于APT注解处理器。 【标签】"APT, Butter Knife, view注入, ...

    APT32S003数据手册V1.01

    1.1 APT32S003介绍 1.2 主要特性 1.2.1 处理器(CPU) 1.2.3 可嵌套中断控制器(NVIC) 1.2.5 独立看门狗定时器(IWDT

    apt mirror

    2. **镜像同步**:使用特定工具如`apt-mirror`或`apt-cacher-ng`来同步镜像。`apt-mirror`可以定期或一次性下载整个仓库,而`apt-cacher-ng`更侧重于缓存,只在需要时下载未被本地用户使用的软件包。 3. **配置本地...

    apt cyg 201602

    - 用户基础:由于面向的是对Linux有一定了解的用户,对于不熟悉Linux的Windows用户,使用apt-cyg可能需要一定的学习成本。 总结,apt-cyg为Windows用户提供了一种接近Linux的包管理体验,它在简化软件管理和维护...

    AOP的apt之android中的实际应用demo

    "ViewFinder"项目是一个很好的学习资源,它演示了如何在实际应用中利用APT实现类似ButterKnife的功能,这对于理解和掌握这两个概念非常有帮助。通过深入研究这个示例,开发者可以进一步提升自己的Android开发技能,...

    APT实践分享:基于机器学习的隐蔽信道检测从0-_1.pdf

    相比于基于规则的静态阈值检测误报高,易被绕过等问题,可以使用机器学习技术从历史数据中学习出一个DNS隧道模式用于检测。使用机器学习构建DNS隧道检测模型,重要步骤是对DNS隧道流量进行特征挖掘分析,需要以DNS...

    windows APT

    Windows平台因其广泛使用,往往成为APT攻击的主要目标。 在Windows APT手册中,你可能会学习到以下关键知识点: 1. **Windows内核知识**:理解Windows操作系统的基本结构,如内核模式与用户模式的区别,以及如何...

    2018威胁情报&APT;论坛议题

    【标题】"2018威胁情报&APT;论坛议题"揭示了本次论坛的核心讨论内容,聚焦于网络安全领域中的高级持续性威胁(Advanced ...通过深入学习这些内容,安全从业人员可以提升对APT的防御能力,为企业构筑更坚固的安全防线。

    基于机器学习APT检测--问题与方法2

    针对APT的检测,机器学习已经成为一种有效的工具。本文主要探讨了基于机器学习的APT检测过程中遇到的四个关键难点及其相应的解决方案。 首先,难点一涉及到如何从原始病毒文件中提取可分析的数据。解决这个问题的...

Global site tag (gtag.js) - Google Analytics