讲师_@王晓春
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接
静态链接
动态链接
最初只有.tar.gz的打包的源码文件,用户必须编译每个他想在GNU/Linux上运行的软件。用户们急需系统提供一种方法来管理这些安装在机器上的软件,当Debian诞生时,这样一个管理工具也就应运而生,它被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux系统中,稍后Red Hat才开发自己的“rpm”包管理系统
yum
:rpm包管理器的前端工具apt
:deb包管理器前端工具zypper
:suse上的rpm前端管理工具dnf
:Fedora 18+ rpm包管理器前端管理工具ldd /PATH/TO/BINARY_FILE
ldconfig
加载配置文件中指定的库文件/sbin/ldconfig –p
显示本机已经缓存的所有可用库文件名及文件路径映射关系/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
/etc/ld.so.cache
/var/lib/rpm
rpm
yum
, dnf
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE…
[OPTION] | 注释 |
---|---|
-v | 显示过程 |
-h | 以#显示程序包管理执行进度 |
#安装+显示过程+以#显示程序包管理执行进度
rpm -ivh PACKAGE_FILE ...
rpm -i [install-options] PACEAGE-FILE...
[install-options] | 注释 |
---|---|
--test |
测试安装,但不真正执行安装,即dry run模式 |
--nodeps |
忽略依赖关系 |
--replacepkgs |
覆盖原有文件 |
--nosignature |
不检查来源合法性 |
--nodigest |
不检查包完整性 |
--noscripts |
不执行程序包脚本 |
%pre: 安装前脚本 --nopre | |
%post: 安装后脚本 --nopost | |
%preun: 卸载前脚本 --nopreun | |
%postun: 卸载后脚本 --nopostun |
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
[install-options] | 注释 |
---|---|
--oldpackage |
降级 |
--force |
强制安装 |
示例
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
rpm {-q|--query} [select-options] [query-options]
[select-options] | 注释 |
---|---|
-a |
所有包 |
-f |
查看指定的文件由哪个程序包安装生成 |
-p rpmfile |
针对尚未安装的程序包文件做查询操作 |
--whatprovides CAPABILITY |
查询指定的CAPABILITY由哪个包所提供 |
--whatrequires CAPABILITY |
查询指定的CAPABILITY被哪个包所依赖 |
cpio –itv |
预览包内文件 |
cpio –id “*.conf” |
释放包内文件 |
[query-options] | 注释 |
---|---|
--changelog |
查询rpm包的changelog |
-c |
查询程序的配置文件 |
-d |
查询程序的文档 |
-i |
信息 |
-l |
查看指定的程序包安装后生成的所有文件 |
--scripts |
程序包自带的脚本 |
--provides |
列出指定程序包所提供的CAPABILITY |
-R |
查询指定的程序包所依赖的CAPABILITY |
#查询命令由哪个程序包提供
rpm -qf /usr/sbin/ifconfig
#查询包的信息
rpm -qi screen
#查询包的配置文件
rpm -qc screen
#查看指定的程序包安装后生成的所有文件
rpm -ql screen
#查询程序的文档
rpm -qd screen
#针对尚未安装的程序包文件做查询操作
-qpi PACKAGE_FILE
-qpl PACKAGE_FILE, ...
#对所有包
-qa
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
rpm {-V|--verify} [select-options] [verify-options]
[root@centos7 /data/shellscript]$rpm -V setup
.......T. c /etc/profile
S 文件大小不同
M 模式不同(包括权限和文件类型)
5 摘要(以前是MD5和)有所不同
D 设备主/副号码不匹配
L 指向路径不匹配
U 所有都不同
G 属组不同
T mtime不同
P 功能不同
rpm -K|checksig rpmfile
检查包的完整性和签名rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
/var/lib/rpm
rpm --initdb
(如果事先不存在数据库,则新建之;否则,不执行任何操作rpm --rebuilddb
CentOS: yum
, dnf
baseurl
:/etc/yum.conf
:为所有仓库提供公共配置/etc/yum.repos.d/*.repo
:为仓库的指向提供配置(*
可以自定义)[仓库名或ID]
name=仓库名自定义
baseurl=http://url.com/
file:///mnt/
enabled={1|0} #启用/禁用
gpgcheck={1|0} #gpg检验
gpgkey=URL #gpg密钥链接
enablegroups={1|0} #包组
failovermethod={roundrobin|priority}
roundrobin: #意为随机挑选,默认值
priority: #按顺序访问
cost= #默认为1000
$releasever
: 当前OS的发行版的主版本号$arch
: 平台,i386,i486,i586,x86_64等$basearch
:基础平台;i386, x86_64$YUM0-$YUM9
:自定义变量示例:
http://server/centos/ r e l e a s e v e r / releasever/ releasever/basearch/
http://server/centos/7/x86_64
http://server/centos/6/i386
生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable “仓库名"
禁用仓库
yum-config-manager --enable “仓库名”
启用仓库
yum-config-manager
yum [options] [command] [package ...]
[OPTION] | 注释 |
---|---|
--nogpgcheck |
禁止进行gpg check |
-y |
自动回答为“yes” |
-q |
静默模式 |
--disablerepo=repoidglob |
临时禁用此处指定的repo |
--enablerepo=repoidglob |
临时启用此处指定的repo |
--noplugins |
禁用所有插件 |
注释 | [command] |
---|---|
显示仓库列表: | yum repolist [all|enabled|disabled] |
显示程序包: | yum list |
yum list [all | glob_exp1] [glob_exp2] [...] |
|
yum list {available|installed|updates} [glob_exp1] [...] |
|
安装程序包: | yum install package1 [package2] [...] |
(重新安装) | yum reinstall package1 [package2] [...] |
升级程序包: | yum update [package1] [package2] [...] |
(降级) | yum downgrade package1 [package2] [...] |
检查可用升级: | yum check-update |
卸载程序包: | yum remove | erase package1 [package2] [...] |
查看程序包信息: | yum info [...] |
查看指定的特性(可以是某文件)是由哪个程序包所提供: | yum provides|whatprovides feature1 [feature2] [...] |
清理本地缓存:
|
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] |
构建缓存: | yum makecache |
搜索,以指定的关键字搜索程序包名及summary信息: | yum search string1 [string2] [...] |
查看指定包所依赖的capabilities: | yum deplist package1 [package2] [...] |
安装及升级本地程序包:(用install替代) | yum localinstall rpmfile1 [rpmfile2] [...] |
(用update替代) | yum localupdate rpmfile1 [rpmfile2] [...] |
查看yum事务历史:
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
#查看安装历史
yum history
#查看安装历史信息
yum history info 6
#撤消安装
yum history undo 6
#重做历史
yum history redo 6
日志 :/var/log/yum.log
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
mount /dev/cdrom /mnt/cdrom
[CentOS7]
name=CD_ROM
baseurl=file:///
gpgcheck=0
enabled=1
createrepo [options]
1. yum install httpd -y
2. systemctl start httpd ;systemctl enable httpd
3. cd /var/www/html
4. mkdir centos/{6,7}/os/x86_64
5. mount /dev/sr0 /var/www/html/centos/6/os/x86_64
6. mount /dev/sr1 /var/www/html/centos/7/ox/x86_64
DNF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm
yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm
(也可以安装EPEL源后,然后直接: yum install python-dnf dnf dnf-conf
)
配置文件:/etc/dnf/dnf.conf
仓库文件:/etc/yum.repos.d/ *.repo
日志: /var/log/dnf.rpm.log
dnf [options] [...]
#安装软件包
dnf install PACKAGE
#重新安装特定软件包
dnf reinstall PACKAGE
#升级软件包
dnf update PACKAGE
#检查系统软件包的更新
dnf check-update
#升级所有系统软件包
dnf update 或 dnf upgrade
#删除软件包
dnf remove PACKAGE 或 # dnf erase PACKAGE
#查看安装在您系统中的 DNF 包管理器的版本
dnf --version
#删除无用孤立的软件包
dnf autoremove
#显示系统中可用的 DNF 软件库
dnf repolist
#列出用户系统上的所有来自软件库的可用软件包和所有已经安装在系统上的软件包
dnf list
#列出所有安装了的 RPM 包
dnf list installed
#列出来自所有可用软件库的可供安装的软件包
dnf list available
#查看软件包详情
dnf info nano
#删除缓存的无用软件包
dnf clean all
##创建缓存
dnf makecache
#搜索软件库中的 RPM 包
dnf search nano
#查找某一文件的提供者
dnf provides /bin/bash
#查看 DNF 命令的执行历史
dnf history
C语言源代码编译安装三步骤:
1、./configure
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile
(2) 检查依赖到的外部环境,如依赖的软件包
2、make
根据Makefile文件,构建应用程序
3、make install
复制文件到相应路径
开发工具:
autoconf
: 生成configure脚本
automake
:生成Makefile.in
注意:安装前查看INSTALL,README
开源程序源代码的获取:
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip
第一步:configure脚本
选项:指定安装位置、指定启用的特性
–help: 获取其支持使用的选项
选项分类:
安装路径设定:
–prefix=/PATH:指定默认安装位置,默认为/usr/local/
–sysconfdir=/PATH:配置文件安装位置
System types:支持交叉编译
Optional Features: 可选特性
–disable-FEATURE
–enable-FEATURE[=ARG]
Optional Packages: 可选包
–with-PACKAGE[=ARG] 依赖包
–without-PACKAGE 禁用依赖关系
注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION
第二步:make
第三步:make install
安装后的配置:
(1) 二进制程序目录导入至PATH环境变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导入帮助手册
编辑/etc/man.config|man_db.conf文件
添加一个MANPATH
.deb
”,类似rpm文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必需的文件、元数据和指令dpkg
:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项APT
:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于C/S架构dpkg常见用法:man dpkg
#安装包
dpkg -i package.deb
#删除包,不建议,不自动卸载依赖于它的包
dpkg -r package
#删除包(包括配置文件)
dpkg -P package
#列出当前已安装的包,类似rpm -qa
dpkg -l
#显示该包的简要说明,类似rpm –qi
dpkg -l package
#列出该包中所包含的文件,类似rpm –ql
dpkg -L package
#搜索包含pattern的包,类似rpm –qf
dpkg -S <pattern>
#列出该包的状态,包括详细信息,类似rpm –qi
dpkg -s package
#配置包,-a 使用,配置所有没有配置的软件包
dpkg --configure package
#列出 deb 包的内容,类似rpm –qpl
dpkg -c package.deb
#解开 deb 包的内容
dpkg --unpack package.deb
Debian 使用APT工具来管理包系统,它与 apt 命令不同。在基于 Debian 的 Linux 发行版中,有各种工具可以与 APT 进行交互,以方便用户安装、删除和管理的软件包。apt-get 是其中一个常用的命令行工具,另外一款较为流行的命令行与 GUI 兼顾的工具是 Aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令中
在 2014 年apt 命令发布第一个稳定版,Ubuntu 16.04 引入新特性之一便是 apt 命令,apt 命令解决了命令过于分散的问题,它包括 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,提供管理软件包所需的必要选项
apt 相当于 apt-get、apt-cache 和 apt-config 中最常用命令选项的集合
apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。此外,启用的几个特性也非常有帮助。例如,可以在使用 apt 命令安装或删除程序时看到进度条。apt 还会在更新存储库数据库时提示用户可升级的软件包个数
apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令,也即可用 apt 替换部分 apt-get 系列命令,但不是全部
查看帮助:apt help
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 list 列出包含条件的包(已安装,可升级等)
apt edit-sources 编辑源列表
APT包索引来自/etc/apt/sources.list文件和/etc/apt/sources.list.d目录中定义的存储库的可用包的数据库。要使用存储库中所做的最新更改来更新本地程序包索引
apt命令操作(如安装和删除软件包)记录在/var/log/dpkg.log日志文件中
apt示例:
安装包:apt install tree zip
删除包:apt remove tree zip
说明:apt remove中添加–purge选项会删除包配置文件,谨慎使用
更新包索引:apt update
升级包:apt upgrade ,要升级系统,请首先更新软件包索引,再升级
1、查询命令java来自于哪个rpm包
2、yum的配置和使用,包括yum仓库的创建
3、编写系统初始化脚本 reset.sh,包括别名,提示符颜色,yum仓库配置文件,安装tree,ftp,lftp,telnet等包
4、在CentOS 7上编译安装 apache 2.4.25 源码包,并启动此服务
1、查询命令java来自于哪个rpm包(3个方法)
1. rpm -qf /usr/bin/java
2.
3. dnf whatprovides /usr/bin/java
4. yum whatprovides /usr/bin/java
2、yum的配置和使用,包括yum仓库的创建
1.#创建*.repo文件
vim /etc/yum.repos.d/new.repo
...
[newrepo] #仓库名
name="The new one of yum repo" #仓库描述
baseurl=file:///mnt #仓库源
enabled=1 #是否启用
gpgcheck=0 #是否gpg检验
...
2.#删除原来的缓存
yum clean all
3.#重新构建缓存
yum makecache
3、编写系统初始化脚本 reset.sh,包括别名,提示符颜色,yum仓库配置文件,安装tree,ftp,lftp,telnet等包
CO_RED='\e[1;31m'
CO_GREEN='\e[1;32m'
LOR='\e[0m'
#configure yum of cd_rom
lsblk|grep "^sr[0-9]" > /dev/null
[ $? -eq 0 ]
cat >> /etc/yum.repos.d/cdrom.repo << EOF
[cdrom]
name=cdrom
baseusrl=file:///mnt
enabled=1
gpgcheck=0
EOF
[ $? -eq 0 ] && echo -e "${CO_GREEN}Configure yum of cdrom successful!${LOR}" || echo -e "${CO_RED}Configure yum of cdrom fail!${LOR}"
#install tree ftp lftp telnet
yum -y install tree
[ $? -eq 0 ] && echo -e "${CO_GREEN}install tree successful!${LOR}" || echo -e "${CO_RED}install tree fail!${LOR}"
yum -y install ftp
[ $? -eq 0 ] && echo -e "${CO_GREEN}install ftp successful!${LOR}" || echo -e "${CO_RED}install ftp fail!${LOR}"
yum -y install lftp
[ $? -eq 0 ] && echo -e "${CO_GREEN}install lftp successful!!${LOR}" || echo -e "${CO_RED}install lftp fail!${LOR}"
yum -y install telnet
[ $? -eq 0 ] && echo -e "${CO_GREEN}install telnet successful!!${LOR}" || echo -e "${CO_RED}install telnet fail!${LOR}"
4、在CentOS 7上编译安装 apache 2.4.25 源码包,并启动此服务
wget http://archive.apache.org/dist/httpd/httpd-2.4.39.tar.gz
cd hhtpd-2.4.39
#编译前检查你的编译环境
#yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip
./configure --prefix=/usr/local/apache
make
make install
configure: error: APR not found . Please read the documentation
yum -y install apr.x86_64 apr-util.x86_64