热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

在制作deb包时可能用到的三个命令

在制作deb包时可能用到的三个命令--Linux发行版技术-Debian信息,下面是详情阅读。
在制作deb包时,常常为不知道这个软件包需要哪些依赖条件而苦恼。现在,有了如下几个命令问题就好解决多啦。
1、ldd:用来查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。
2、dpkg -S:这是一个带参数的dpkg命令,作用是查询某一个文件属于哪一个软件包。
3、apt-file:如果不喜欢使用dpkg -S这个带参数的dpkg命令。还可以使用apt-file这个命令。它的作用和dpkg -S的作用一样。
有了这几个命令,在制作deb包时就方便多了。首先,用ldd查看某一个文件需要哪些共享库。然后,用dpkg -S或者apt-file 来查看某一个共享库文件属于哪一个软件包。最后就可以在control这个文件里写上这个软件包的依赖关系。
附 1:ldd命令原理(摘自网络)
1、首先ldd不是一个可执行程序,而只是一个shell脚本
2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
(1) export LD_TRACE_LOADED_OBJECTS=1
(2) 再执行任何的程序,如ls等,看看程序的运行结果
3、ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。
4、实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)
附 2:ldd命令使用方法(摘自ldd --help)
名称 ldd - 打印共享库的依赖关系
大纲 ldd [选项]... 文件...
描述 ldd 输出在命令行上指定的每个程序或共享库需要的共享库。
选项
    --version
       打印ldd的版本号
    -v --verbose
       打印所有信息,例如包括符号的版本信息
    -d --data-relocs
       执行符号重部署,并报告缺少的目标对象(只对ELF格式适用)
    -r --function-relocs
       对目标对象和函数执行重新部署,并报告缺少的目标对象和函数(只对ELF格式适用)
    --help 用法信息
注意:
    ldd的标准版本与glibc2一起提供。Libc5与老版本以前提供,在一些系统中还存在。在libc5版本中长选项不支持。另一方面,glibc2版本不支持-V选项,只提供等价的--version选项。
   如果命令行中给定的库名字包含'/',这个程序的libc5版本将使用它作为库名字;否则它将在标准位置搜索库。运行一个当前目录下的共享库,加前缀"./"。
错误:
    ldd不能工作在a.out格式的共享库上。
    ldd不能工作在一些非常老的a.out程序上,这些程序在支持ldd的编译器发行前已经创建。如果你在这种类型的程序上使用ldd,程序将尝试argc = 0的运行方式,其结果不可预知。
附 3:apt-file
apt-file是一个软件包查找工具,可以查到软件包所含的文件和安装的位置。
· apt-file update
更新软件包的文件库,第一次使用或apt-get update后都需运行一次。
· apt-file search file_name
查找该文件存在于哪些软件包中。
· apt-file list package_name
显示该软件包的文件。
推荐阅读
  • 万事起于配置开发环境
    万事起于配置开发环境 ... [详细]
  • 本文将详细介绍在Linux环境下挂载U盘的方法和步骤,帮助用户更好地理解和操作Linux系统下的外部存储设备。 ... [详细]
  • FTP作为一种传统的文件传输协议,广泛用于不同设备间的文件交换。然而,随着网络安全需求的提升及传输效率的要求,选择合适的FTP客户端变得尤为重要。本文将介绍如何利用WinSCP这款强大且安全的工具,实现两台电脑之间的文件高效传输。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • 对于初次购买阿里云服务器的新手用户来说,如何高效地利用服务器资源并成功部署网站是一个重要的课题。本文将详细指导您完成从购买服务器到网站上线的六个关键步骤。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 本文探讨了如何使Shell和程序同时响应Ctrl-C信号的方法,即通过将两者置于同一进程组并将其设为终端的前台进程组。 ... [详细]
  • 如何更换Anaconda和pip的国内镜像源
    本文详细介绍了如何通过国内多个知名镜像站(如北京外国语大学、中国科学技术大学、阿里巴巴等)更换Anaconda和pip的源,以提高软件包的下载速度和安装效率。 ... [详细]
  • 探讨Linux系统中PCI设备的I/O地址与内存映射的区别及其实现方式。 ... [详细]
  • 在尝试使用Ubuntu 10.04进行Android开发时,遇到了系统无法识别HTC G1设备的情况。本文将详细介绍如何通过配置系统和安装必要的驱动来解决这一问题。 ... [详细]
  • 本文详细介绍了如何使用 Python 编程语言中的 Scapy 库执行 DNS 欺骗攻击,包括必要的软件安装、攻击流程及代码示例。 ... [详细]
  • 本文介绍了Linux内核中TCP的三种接收队列:Prequeue、sk_receive_queue和Backlog。这些队列在数据包处理过程中扮演着重要角色,帮助提高系统性能和效率。 ... [详细]
  • 本文探讨了Linux/Unix文件系统中两种主要的权限控制方式:传统的UGO(User/Group/Others)和更为精细的ACL(Access Control List)。ACL提供了一种更灵活的权限管理方法,适用于需要对文件系统进行细粒度控制的场景。 ... [详细]
  • 工作中频繁在不同Linux服务器之间切换时,频繁输入密码不仅耗时还影响效率。本文介绍如何通过设置SSH密钥认证,简化登录流程,提高工作效率。 ... [详细]
  • 本文档提供了首次周测的答案解析,涵盖特殊符号、命令作用、路径说明以及实战练习等内容。 ... [详细]
author-avatar
fangxiaoping47
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有