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程序包管理与初识磁盘
原文:http://www.cnblogs.com/Xun1521/p/6759543.html