Linux 程序包管理
- API:Application Binary Interface(应用程序的二进制接口)
- ABI:APPlication Program Inertface(应用程序的开发接口)
- Windows : exe,msi
- Windows与Linux不兼容
- ELF:(Executale and Linkable Format):可执行可连接格式,linux运行格式
- PE:(Portable Executable)可移植可执格式Windows运行格式
-
库级别的虚拟化:
- 要想在Windows与Linux上分别运行对方的应用程序需:
- WinE,在linux上模拟windows系统
- cywin:在windows上模拟linux系统
-
系统级开发:
- c/c++:httpd,vsftpd,nginx(服务类应用程序)
- go
-
应用级开发
- java /Python/perl/ruby/php:
- java:hadoop,hbase,运行java程序要依赖(jvm java虚拟机解释器)
- Python:openstack(云操作系统)依赖(Python 虚拟机解释器pvm)
-
c/c++ 程序格式:
- 源代码:文本格式的程序代码:
- 编译开发环境:编译器 , 头文件 , 开发库 ,
- 二进制格式:文本格式的程序代码-->编译器-->二进制格式(二进制程序, 库文件, 配置文件 ,帮助文件)
-
java/Python程序格式:
- 源代码:要编译成能够在其虚拟机(jvm/pvm)运行的格式:
- 开发环境:编译器 , 开发库
-
项目构建工具:
- c/c++:make
- java :maven
程序包管理器:
- 源代码程序-->可在目标可直接运行的二进制格式(二进制程序, 库文件, 配置文件 ,帮助文件) -->组织成为一个或有限几个"包"文件;
- 安装, 升级 , 卸载, 查询, 校验
- 包管理:
- redhat:redhat package manager,rpm,"rpm";rpm package manager;
- 源代码:name-VERSION.tar.gz
- VERSION:major,minor.release
-
rpm 包命令格式:
- name-VERSION-release.arch.rpm
- VERSION:major, minor ,release
- release:rpm包的发行号
- release.os : 2.ei7.i386.rpm
- archetecture:操做系统架构( i386, x64(amd64) , ppc ,noarch)
- redis-3.0.2.tar.gz--> redis-3.0.2-1.centos7.x64.rpm(包命名格式)
- 拆包:主包,子包
- 主包:name-VERSION-relesase.arch.rpm
- 子包:name-function-VERSION-relesase.arch.rpm
- function:devel, utils ,libs...
-
包之间的依赖关系:
- 例:x ,y ,z
- x-->y ,z
- y -->a , b, c
-
前段工具:自动解决依赖关系;
- yum:rhel系列系统上 rpm包管理器的前段工具;
- apt-get( apt-cache):deb包管理的前段工具;
- zypper:suse的rpm管理器嵌段工具;
- dnf:Fedora 22+系统上rpm包管理器的前段工具;
- 功能:将编译好的应用程序的各组成文件打包成一个或几个程序文件,从而更方便实现程序包的安装, 升级, 卸载和查询等管理操作;
- 程序报的组成清单(每个程序包都单独实现)
- 文件清单
- 安装或卸载时运行的脚本
- 数据库(公共)
- 程序包的名称和版本;
- 依赖关系;
- 功能说明;
- 安装生成的个文件的文件路径及校验码信息;
- /var/lib/rpm/rpm数据库
-
获取程序包的途径:
- 1, 系统发行版的光盘或官方的文件服务器;(或镜像站点);
- http://mirrors.aliyun.com,
- http://mirrors,163.com
- 2, 项目的官方站点
- 3,第三方组织:EPEL:
Centos系统上rpm命令管理程序;
- 安装 ,升级,卸载,查询和校验,数据库维护
- rmp: rpm [option][package_file]
- 安装:-i --install
- 升级: -U --update,-F --freshen
- 卸载:-e --erase
- 查询:-q --query
- 校验:-V --verify
- 数据库维护:--buiddb ,--initdo
- 安装:
- rpm {-i|--install} [install-options] PACKAGE_FILE ...
- rpm -ivh PACKAGE _FILE
- GENRAL OPTION
- -v:version,详细信息
- -vv:更详细信息
- [install-option]:
- -h:hash marks输出进度条;每个#表示2%的进度;
- --test:测试安装,
- --nodeps:忽略依赖关系
- --replacepkgs:重新安装
- --noscripts:不运行脚本
- rpm可以自带脚本:
- 四类:
- preinstall:安装过程完成之后运行的脚本,%pre
- postinstall:安装过程完成之后运行脚本,%post
- preuninstall:卸载过程真正开始执行之前运行的脚本,%preun-nopreun
- postuninstall:卸载过程完成之后运行的脚本,%potun,--nopostun
- --nosignature:不检查包签名信息,不检查来源合法性,
- --nodigest:不检查包的完整性信息;
-
升级:
- -U:升级或安装
- - F:升级
- rpm -Uvh package _file
- rpm -Fvh package _file
- --oldpackage:降级;
- --force:强制升级;
- 1,不要对内核做升级操作,Linux支持多内和版本并存,因此,直接安装新版本内核;
- 2,如果某源程序包的配置文件安装曾被修改过,升级时,新本版本的程序提供的同一个配置文件不会覆盖原配置文件,而是把新版本的配置文件重命名(filename.epmenew)后提供;
- 卸载:
- rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
- [--notriggers] [--test] PACKAGE_NAME ...
- --ailmatches:卸载所有匹配指定名称的程序包的个版本;
- -nodeps:hulue依赖关系
- -test:测试卸载
-
查询:
- rpm {-q|--query} [select-options] [query-options]
- package_name :查询指定的程序包是否已经安装 ,及版本
- -a,--all:查看所有已经安装过的包;
- -f :file:查询指定的文件由那个程序包安装生成;
- -p --package PACKAGE_FILE:用于实现未安装的程序包进行查询
- --whatprovides CAPABILITY :查询指定的CAPANILITY由那个程序包提供
- --whatrequires CAPABILITY:查询指定的CAPANILITY被那个包所依赖;[query-options]
- --changelog:查看rpm包的changelog;
- -l,list:程序安装生成的所有文件列表;
- -i,info:程序包相关的信息,版本号,大小, 所属的包组,等;
- -c,--cnfigfiles:查询指定的程序提供的配置文件;
- -d --docfiles:查询指定的程序包提供的文档;
- --provides :查询指定程序包提供的所有的capanility
- -R:查询指定的程序包的依赖关系;
- --scripts:查询程序包自带脚本信息
-
用法:
- -ql package , -qf:file, -qc:package
- -qd: package, -qe packag, -qp package
- -qpl package_file, -qpi package _file
- -qpc package_file
-
校验:
- rpm -V--verify[select-options][verify-options]
-
包来源合法性验证和完整性验证:
- 来源合法性验证:
- 数字签名
- 完整性验证:
- 获取并导入信任的包制作者的密钥;
- 对于Centos7发行版来说; rpm --import/etc/pki/rpm-gpg RPM-GPG-KEY-CentOS-7
-
验证:
- 1,安装此组织签名的程序时,会自动执行验证;
- 2,手动验证 rpm -K PACKAGE_FILE
-
数据库重建:
- rpm管理器数据库路径:/var/lib/rpm/
- 查询操作:通过此处的数据库进行;
-
获取帮助:
- Centos6:man rpm
- Centos7:man rpmdb
- rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] [--root DIRECTORY]
- --initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作;
- --rebuildb:重新构建,通过读取当前系统上所有已经安装的程序包进行重新创建;
使用前端工具: yum ,dnf
- YUM:yellow dog, yellowdog Upadate Modifer
- yum repository:yum repo
- 存储了众多rpm包,以及包的相关的元数据文件(放置于特定 目录下:repodata);
-
文件服务器:
- ftp:// http:// file://
-
yum客户端:
- 配置文件:/etc/yum.cof :为仓库的指向提供公共配置
- /etc/yum.repos.d/*.repo:为仓库的指向提供配置
- 仓库定义:
- [repositoryID]
- name= xxx some name this repository
- baseurl=url ://path/to/repository/
- gpgcheck=1|0
- 例:
- [base]
- name=base on 172.16.0.1
- baseurl=http://172.16.0.1/cobbler/ks_mirror/Centos-6.8_x86_x64/gpgcheck=1
-
yum命令的使用
- yum [options] [command] [package ...]
-
显示仓库列表:
- repolist [all|enabled|disabled] 显示程序包组\:
- list
- yum list [all | glob_exp1] [glob_exp2] [...]
- yum list available [glob_exp1] [... ]
- 安装程序包:
- install package1 [package2] [...]
- reinstall package1 [package2] [...(重新安装)
- 检查升级包:
- update [package1] [package2] [...]
- downgrade package1 [package2] [...](降级)
- 卸载程序包:
- remove | erase package1 [package2] [...]
- 查看程序包infomation简要信息
- info [...]
- 查看程序包提供的特性(可以是某个文件)是由那个程序包所提供的
- provides | whatprovides feature1 [feature2] [...]
- 清理本地缓存:
- clean [ packages | metadata | expire-cache | rpmdb | plugins |
- 构建缓存:makecache
-
搜索:
- search string1 [string2] [...]
- 以指定的关键字搜索程序包名summary信息
- 查看指定包的所依赖的capabilities:
- deplist package1 [package2] [...]
- history查看yum事务历史:
- history [info|list|packages-list|packages-info|summary|addoninfo|redo|undo|rollback|new|sync|stats]
包组管理groupinstall:
- 如何使用光盘当做本地yum仓库:
- 1.挂载光盘只某目录:
- 例如 /media/cdrom
- mount -r /dev/cdrom /media/cdrom(挂载cd光盘)
- 2.创建配置文件:
- [repositoryID]
- name= xxx some name this repository
- baseurl=url ://path/to/repository/
- gpgcheck=1|0
- yum的命令选项:
- --nogpgcheck:禁止进行gpg check;
- -y:自动回答"yes
- -q:静默
- --disablerepo=repoidglob:临时禁用此处hiding的repo
- --nopiugins:禁用所有插件
- yum的repo配置文件中的可用的变量:
- $releasever:当前0S的发行版本号:
- $arch:平台
- $basearch:基础平台:
- %YUM0-YUM9
创建yum仓库:
- createrrpo [options][directory]
-
程序包编译安装:
- testapp -VERSION-release.src.rpm-->安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后在安装;
- 源代码组织格式:
- 多文件:文件中的代码之间,很可能存在的跨文件依赖关系
- C代码编译安装三步骤:
- ./configgure:
- 1.通过选项传递参数,指定启用特性,安装路径等;执行时会参考用户的指定用户的指定以及Makefile.in文件生成makefile;
- 2.检查依赖到的外部环境:
-
make:
- 根据makefile文件,构建应用程序;
- make install
- 开发工具:
- autoconf,生成configure脚本
- automake:生成Makefile.in
- 安装前查看INSTALL ,README
- 开源程序源代码的获取:
- 官方自建站点:
- apache.org(ASF)
- mariadb.org
- 代码托管:
- SourForge
- Github.com
- code.google.com
- c/c++:gcc(GNU C Complier) C编译器
- 编译C源代码:
- 前提:提供开发工具及开发环境
- 开发工具:make ,gcc等
- 开发环境: 开发库,头文件
- glibc:标准库
- 通过"包组"提供开发组件
- Cents6 :"Devrlopment Tools"," Server Platform Development"
- 第一步: configure脚本
- 选项: 指定安装位置, 指定启用的特性
- --help:获取其支持使用的选项
- 选项分类
- 安装路径设定:
- --prefix=/path/to/somewhere:指定默认安装位置,默认/usr/lolcor
- --sysyconfig=/path/to/somewhere:配置文件安装位置
- System types:
- Optional Features:可选特性
- --disable -FEATURE
- Optional Pcakager:可选包
- --with -PAKCAGE[=ARG]
- netstat -tan
- 第二步:make
- 第三步:make install
-
安装后的配置:
- 1.导出二进制程序目录至PATH环境变量中:
- 编辑文件/etc/profile.d/NAME.sh
- export PATH=/PATH/TO/BIN:$PATH
- 2.导出库文件路径:
- 编辑/etc/so.conf.d/NAME.conf
- 添加新的库文件所在目录至此文件中;
- 让系统重新生成缓存:
- 1dconfig[-v]
- 3,导出头文件
- 基于链接的方式实现:
- in -sv
- 4导出帮助手册
- 编辑/etc/man.config文件
- 添加一个MANPATH
Linux磁盘及基础管理
- Disks:提供持久存储数据功能
- 磁盘:机械硬盘,固态;
- 机械硬盘(HDD):Hard Disk Drive.
- 机械硬盘机构:
- head : 磁头
- track:磁道
- sector:扇区
- cylinder:柱面
- 磁盘接口类型:
- IDE:并口 133MB/s
- SCSI:并口
- SATA:串口 6gbps
- SAS: 串口 6gbps
- USB:串口,480MB/s 并口:同一线缆可以接多块设备;
- 设备类型:
- Linux的哲学思想:一切皆文件:
- 块设备(block)随机访问,数据交换单位是块‘
- 字符设备:char线性访问,数据交换单位是“字符”;
- 设备文件:FHS磁盘的设备
- /dev/ DEV_FILE
- 设备文件:关联至设备的驱动程序;进而能够跟与之对应的硬件设备进行IO通信
- 设备编号:
- major:主设备号,区分设备类型;用于表明设备所需要的驱动程序
- minor:次设备号,区分同类型下的不同的设备;是特定设备的访问入口;
- mknod命令;
- mknod - make block or character special files
- mknod [OPTION]... NAME TYPE [MAJOR MINOR]
- -m MODE:创建后的设备文件的访问权限;
- 设备文件名:ICANN
- 磁盘:
- IDE:/dev/sd
- 例:/dev/sda,/dev/sdb
- SCSI,SATA,USB,SAS,:/dev/sd【a-z】
- 分区:
- /dev/sda#:
- /dev/ada1...
- 引用设备的方式:
- 设备文件名, 卷标 , UUID;
磁盘分区:MBR,GPT
- 分区划分基于柱面
- MBR: Master Boot Record(使用32位表示扇区数,分区不超过2T)
- 0磁道0扇区:512bytes
- 446bytes:bootloader,程序,引导启动操作系统程序:
- 64bytes:分区表
- 4主分区;3主分区1扩展, n逻辑分区
- 主分区和扩展分区的标识:1-4
- 逻辑分区:5+
创建及管理分区:
分区创建工具; parted ,fdisk‘gdisk:
- fdisk :创建MBR分区
- gdisk :创建GPT分区
- lsblk:列出设备块
- 创建分区使用:
- fdisk提供了一个交互式接口来管理分区,他有许多子命令,分别用于不同的管理功能;
- 所有的操作均在内存中完成,没有直接同步到磁盘; 直到使用w命令保存至磁盘之上;
- fdisk命令:fdisk -l [-u] [device...]
- fdisk-l [-u ][ device...]
- 常用命令:
- n: 创建新分区
- d: 删除已有分区
- t:修改分区类型
- l:查看所有已经ID
- w:保存并退出
- q:不保存并退出
- m:查看帮助信息
- GPT:GUID(Globals Unique Identifiers) partitiontable支持128个分区,使用64位,支持8Z(512Byte/blok)64Z (4096bYyte/blok) 使用128UUID(Universally Unique Identifier)表示次磁盘和分区GPT分区表自动备份再投尾两份,并有CRC校验位UEFI(统一扩展固件接口)硬件支持GPT,使用操作系统启动 在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在常见文成后无法直接识别;
- 查看:
- cat /proc/partitions
- centos6通知内核重新读取硬盘分区表(刷新操作)
- 新增分区:
- partx-a /dev/DEVICE
- 删除分区:
- patx -d --nr -M-N /dev/DEVICE
- centos7使用: partprobe
- parted: pared的操作都是实时生效,
- 用法: parted[option]...设备,命令,参数...
时间: 2024-10-29 04:45:22