首页 > 代码库 > Linux程序包管理与初识磁盘

Linux程序包管理与初识磁盘

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]...设备,命令,参数...

Linux程序包管理与初识磁盘