7_基于Debian和Ubuntu的软件包管理
Debian and Ubuntu Based Distros
-
Linux上的大多数应用程序都是开源的,我们提供了应用程序的源文件,为了在平台上运行它们,我们必须编译源代码或从二进制包安装它。Linux上下文中的二进制包是包含可执行文件的应用程序包,而不是源代码。可执行文件是编译过程的结果。本文将探讨如何使用
dpkg
管理Ubuntu和其他基于Debian的发行版上的软件应用程序。 -
Deb是所有基于Debian的发行版使用的安装包格式,实际上这是一个包含其他文件的存档,包括已经编译好了的可执行的应用程序。
例如,下载一个forlinux 的谷歌浏览器安装包,右键用Archive Manager打开
我们看到安装包里有三个存档:
control.tar文件包含有关版本、发布、依赖项等元数据信息。
data.tar文件包含可执行文件。可以使用不同的可用工具从最低级别执行包管理操作,从命令dpkg到apt到图形前端,如Synaptic。
dpkg为包管理提供底层基础设施,dpkg数据库包含当前系统上已安装软件的列表,它可以与本地
.deb
包文件一起使用,并且不了解存储库且不解决依赖关系,就像apt一样。其他高级工具(如apt)将在幕后调用dpkg。如果你有一个本地下载的应用程序是一个deb文件,你可以使用dpkg安装它。
用
dpkg --info
命令显示安装包的信息。dpkg --info nameofthefile.deb 用
dpkg -i
安装安装包。sudo dpkg -i nameofthefile.deb 用
dpkg -i
一次安装多个安装包,特别是当多个安装包之间有依赖关系时。要获取所有已安装软件包的列表,运行:
sudo dpkg --get-selections 系统上安装的程序列表
或者你想查看package-version架构和简短描述,使用:
dpkg-query -l | grep name 查询结果中的前缀 ii 表示所需状态为'安装',数据包状态是'已安装.
如果你想查看该安装包安装在系统上的所有文件,可以运行:
dpkg-query -l | grep name dpkg -L packagename 如果你想查看特定文件属于哪个包,请使用大写S选项。
比如想查看ls属于哪个包:
which -a ls dpkg -S /bin/ls coreutils: /bin/ls #可以看到 /bin/ls属于coreutils这个安装包。
要查看该软件包里的所有其他文件,请运行
dpkg -L coreutils | less ...#我们可以看到这个软件包里包含系统cp、mkdir、rm、touch等核心实用程序。
要删除已安装的安装包,请运行:
sudo dpkg -r nameofthepackage 同时,删除安装的应用,请运行:
sudo dpkg -P nameoftheAPP dpkg是一个低级工具,既不能与存储库一起使用,也不能解决依赖问题,最好使用
apt
命令。 -
apt
means advanced Package Tool在安装应用之前,可用:
sudo apt update 该命令不会安装新程序,而会更新索引。
从远程仓库安装多个应用:
sudo apt install 应用名称1 应用名称2 从本地deb文件安装程序,运行:
sudo apt 文件完整路径.deb 删除已经安装的文件,不包括配置文件:
sudo apt remove apache2 删除包,包括所有配置文件:
sudo apt purge apache2 每当在系统安装新的软件包时,软件包依赖项也不会被删除,你可以随时删除这些依赖包。
删除依赖包:
sudo apt auotoremove 默认情况下,Ubuntu将每个已经下载并安装的软件包保存在缓存目录中。
ls -l /var/cache/apt/archives 。。。#这个包包含了所有已安装和升级的软件包的目录。
让我们检测一下它的大小:
du -sh /var/cache/apt/archives 。。。
我们发现这个包非常大,很占空间,如果想删除的话,使用sudo apt clean 它会从该目录中删除除日志文件之外的所有内容。
列出所有可运行的软件包,运行:
apt list 存储库中有数以万计的可用软件包:
apt list | wc -l 要搜寻特定包是否可用,请使用grep命令过滤输出,例如:
apt list | grep postfix 要查找描述中包含单词或短语的软件包,请在双引号之间的短语中运行
apt search "transparant proxy" 要仅仅获取已经安装后的软件包的列表:
apt list --installed | wc -l 要查找有关可用或已经卸载软件包的信息,下载大小及其内容的描述,运行:
apt show 包名 还有一些图形包管理器,其中一些是aptitude或者synaptic,他们以用户友好的方式安装、升级和删除软件包。
-
接着,让我们了解一下源代码编译安装软件包有什么好处。
源代码方式和二进制包是软件包的两种形式。二进制包里面包括了已经经过编译,可以马上运行的程序。你只需要下载和解包(安装)它们以后,就马上可以使用。源代码包里面包括了程序原始的程序代码,需要在你的计算机上进行编译以后才可以产生可以运行程序,所以从源代码安装的时间会比较长。
从源代码编译的一个优点是您可以使用某些选项编译应用程序,而这些选项可能在标准分发包中丢失或禁用。
从源代码编译的另一个优点是您可以访问最新版本,因为分发者启动二进制包分发需要时间。
从源代码编译的另一个优点是可以轻松安装同一个程序的多个版本。
从源代码编译的缺点是,包管理器完全不知道你安装了软件,所以必须手动更新或删除这些软件包,而且操作较复杂,容易破坏系统,这意味着你必须从官方下载源代码,检查其完整性,并解决任何依赖问题。
-
接着让我们学习如何从源代码编译安装软件包。(Source Compilation Guide)
为了能够编译源代码,你需要GNU Compiler Collection(GCC),它是C、C++和Objective-c的编译器和库的集合。
默认的Ubuntu存储库包含一个名叫build-essential的包,其中包含编译器和许多库,以及编译软件所需的其他实用程序。
sudo apt update && sudo apt install build—essential 这实际上会安装许多其他软件包,包括gcc、g++和make。make 是用于构建实用程序源文件的集合,并将它们转换为最终产品。
我们将从编译单个C源文件开始,然后编译更复杂的应用程序。用C创建一个基本的HELLO应用程序。使用vim创建一个扩展名为.c的文件
然后用gcc编译该.c文件,即可生成目标文件。
gcc hello.c -o hello 现在我们编译一个服务器,以ProFTPd(专业的FTP守护程序)为例。
编译程序的第一步是获取其源代码。这是对每个用户都开放的。
第二步是检查文件的完整性,特别是如果你将其安装在生产服务器上。你可以通过检查其哈希或数字签名来做到这一点。
检查哈希值可以通过以下命令:
md5sum 文件名.tar.gz #md5是哈希加密算法 解压到目录
tar -xzvf 文件名.tar.gz 在当前目录中创建了一个包含服务器源代码的新目录:
cd 解压后的文件名/ 服务器的源代码保存在src/里
ls src/ 这里放着许多后缀名为.c的文件
在
解压后的文件名/
目录下还放着一个 configure 文件,该文件会检查您正在编译的程序的要求和依赖关系是否得到满足。它可以配置程序的编译方式,决定启动哪些选项以及哪些选项不会启动。例如,如果您没有安装gcc编译器或者缺少所需的库,然后配置将显示错误。对问题进行故障排除并再次运行配置,直到没有错误为止。如果configure抛出任何错误,请不要继续编译过程。这个脚本有很多选项来控制程序的编译方式;了解其选项,运行./configure --help帮助。另外,建议将配置运行为非特权用户,并且仅作为root用户完成过程的最后一步。
运行:
./configure --help 它显示了很多输出,将它传递到less以便可以浏览输出
./configure --help | less --prefix 将指定软件的安装位置目录,如果你不使用此选项,应用程序文件将转到标准/bin、/usr/bin、/etc等目录,并覆盖任何相同的文件名,这可能破坏你的系统,我的建议是始终使用前缀选项。
如何将某些功能编译或不编译到最终的产品中呢?
例如:
在该文件中搜索 /ssl 其中一个选项叫启用SSL,默认是NO。这意味着如果不指定此选项,将在不支持SSL的情况下编译FTP服务器,所以它不支持加密连接。
如果你希望它支持SSL,那么给这个选项来配置。这适用于任何其它选项。
./configure --prefix=/opt/proftpd #建议那些被编译且不受包管理器控制的程序被安装在一个目录中。 常见错误一般是缺少依赖包。
当没有错误时,下一步是 run
make
命令,这是将构建您的应用程序的GNU实用程序。这意味着它将收集源文件和元数据并将它们转换为最终的产品,它通过多次调用GCC编译器来进行真正的编译。编译程序
make
将使用当前目录中名为Makefile的文件。此文件是由上一步的配置中生成的,包含有关最终产品的详细信息。
执行
make
可以看到make
多次调用gcc编译文件。如果编译遇到问题,则在控制台抛出错误,它们通常是致命的。尝试解决它们,运行
make clean
,然后再次make
。当没有报错时,所有需要的二进制文件都被编译成功。
接着运行命令:
sudo make install 这将创建安装软件的目录,在本例中为/opt/proftpd 。
接着我们不需要这些源代码了,删除它们:
rm -rf 源代码所在的文件夹/* 试着在前台运行一下proftpd,使用-n选项:
sudo ./proftpd -n 上述过程也可以缩略为一条命令:
sudo ./configure --prefix=/opt/proftpd && make && sudo make install 如果以上的命令链没有错误,它会一直正常执行下去。
这是一套标准的编译指南,适用于大多数知名应用程序,然而有些应用程序需要以自定义的方式编译,在这种情况下,你必须获得程序的文档,它通常是源目录里名为install或readme的文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端