软件包管理和yum源配置

1 lilnux 软件包管理

  • 软件运行的环境 就如windows程序不能再linux系统上运行
# ABI: Application Bianary Interface  应用程序的运行环境
      linux ELF(Excuteable and Linkable Format)
      window PE(Portable Excutable)
    库的虚拟化
      linux 安装 WINE 可以实现 windows程序在lilnux上运行
      windows 安装 Cywin 可以实现 linux程序在widnows上运行
# API:Application Programming Interface 应用程序的开发环境
     linux 是支持POSIX协议: Portable OS
  • 程序编译的一般过程
程序源代码-->预处理-->编译-->汇编-->链接
#同时程序可分为静态编译和动态编译
  静态编译:将所需要的库文件全部编译到应用程序内部,可以实现移植应用程序还可以运行,但是多个应用程序会占用很多内存 静态库文件以.a结尾
  动态编译 只编译应用程序本身,将库编译成共享对象(.so),这样可以是实现,多个应用程序可以使用同一个库文件,运行时,可以尽量减少内存的占用
#在linux中 查看二进制程序所依赖的库文件
  ldd  binary_file
#管理及查看本机装载的库文件
  ldconfig 加载库文件
     -p:显示本机已经缓存的所有可用库文件
  库文件的配置关系
     配置文件 /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
     缓存文件 /etc/ld.so.cache
  • 程序包管理器
    功能:将编译好的应用程序的各组成文件打包一个或几个
    程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
# 编译好的二进制程序的组成部分  
   二进制文件,库文件,配置文件,帮助文件
# 在linux中常见的包管理器(但是不会很好解决依赖关系)
   debian: deb 文件,dpkg包管理器
   redhat: rpm 文件 ,rpm 包管理器
# 解决依赖关系的包管理器
   yum: rpm包管理器的前端工具
   apt-get: deb包管理器的前端工具
   zypper: suse 上的rpm前端工具
   dnf: Fedora 18+ rpm包管理器前端管理工具
  • rpm 包管理器的使用
    安装、卸载、升级、查询、校验、数据库维护
# 安装
 -i  安装
 -v 显示过程
 -h 以#显示程序包管理执行进度
    --test:  测试安装,但不真正 执行安装,即dry run 模式
    --nodeps :忽略依赖关系
    --replacepkgs | replacefiles
    --nosignature:  不检查来源合法性
    --nodigest :不检查包完整性
    --noscripts :不执行 程序包脚本
        %pre: ; 安装前脚本; --nopre
        %post: ; 安装后脚本; --nopost
        %preun: ; 卸载前脚本; --nopreun
        %postun:  卸载后脚本; --nopostun
# 升级
  -U 安装有旧版本程序包,则升级,没有,则安装
  -F 安装有旧版本程序包,则升级,没有,则不安装升级
     --oldpackage 降级
     --force 强制安装
  注意
    1  不要对内核做升级操作;Linux 支持多内核版本并存,因此,对直接安装新版本内核
    2  如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)
# 查询 
  -q 查询
  -a 所有包
  -c:  查询程序的配置文件
  -d:  查询程序的文档
  -i: information
  -l:  查看指定的程序包安装后生成的所有文件
  -R:  查询指定的程序包所依赖的CAPABILITY
  -f 查询指定的文件是由哪个程序包生成安装
    --whatprovides CAPABILITY :查询指定的 CAPABILITY由哪个包所提供
    --whatrequires CAPABILITY :查询指定的 CAPABILITY 被哪个包所依赖
    --scripts :程序包自带的脚本
    --provides:  列出指定程序包所提供的CAPABILITY
  rpm2cpio  包文件|cpio –itv 预览包内文件
  rpm2cpio  包文件|cpio –id “*.conf” ” 
  • 包校验
包来源合法性验证及完整性验证
  完整新验证 SHA256
  来源合法性验证 RSA
公钥加密
  对称加密 加密和解密的使用同一密钥
  非对称加密 密钥是成对的
    public key 公钥 公开所有人
    secret key 私钥 不能公开
导入所需要的公钥
  rpm -K|checksig rpm 检查包的完整性和签名
  rpm --import 导入公钥
  rpm -qa "gpg-pubkey" 查看已经导入的公钥
  rpm -e "gpg-pubkey-f4a80eb5-53a7ff4b" 卸载导入的公钥

2 yum的配置

由于rpm的工具不能解决包依赖关系,所以引用yum(rpm前端包管理器)

yum的基本命令
yum repolist [all|enable|disable] 列出yum的源的信息 
yum list package_name... 可以列出所匹配到的包
yum install 安装包
yum reinstall 重新安装包
yum ckeck-update 检查更新
yum remove 移除
yum info 查看包的 information(信息)
yum search key 可以根据关键字查找程序包和summary(摘要)
yum deplist 查看指定包依赖的特性
yum history 事务历史
    [info|list|redo|undo|summary] 信息 列表 重做 回滚 摘要
yum源的配置
[base]
name=base
# 源的url
baseurl=http://172.16.0.1/centos/CentOS-6.9-x86_64/
#是否进行gpg检查
gpgcheck=1 
# 是否可用
enabled=1
#gpg-key的url
gpgkey=http://172.16.0.1/centos/CentOS-6.9-x86_64/RPM-GPG-KEY-CentOS-6
[epel]
name=epel
baseurl=http://172.16.0.1/fedora-epel/6/x86_64/
enabled=1
gpgcheck=0
编译安装的一般步骤,一般大程序包含的原文件很多会有项目管理器管理 make|maven|cmake
开发工具:
  autoconf:  生成configure 脚本
  automake :生成Makefile.in
1 首先下载 源码包解压,文件中会有Makefile.in文件,使用configure脚本生成Makefile文件,注意安装前查看INSTALL,README
./configure 
  通过configure 选项传递参数,指定启用特性,安装路径,执行configure 会依据Makefile.in生成Makefile文件
2 make  根据Makefile文件 构建应用程序
3 make install 复制文件到指定路径
4 导出二进制程序目录到PATH环境中
  编辑/etc/profile.d/name.sh
    export PATH=/path/to/bin:$PATH
5 导出库文件路径
  编辑/etc/ld.so.conf.d/name.conf
     添加新的库文件所在目录至此文件中
  让系统重新生成缓存
      ldconfig [-v]
6 导入头文件 基于链接的方式实现
  ln -sv
7 导入帮助手册
  centos6 编辑/etc/man.conf 添加MANPATH
  centos7 编辑/etc/man_db.conf 添加MANPATH

3 磁盘管理

磁盘接口 
  并行接口(serial): ide(133MB/s) scsi(640MB/s)
  串行接口(parallel): sata(6Gps) sas(6Gps) usb(480MB/s)
磁盘存储术语
  head 磁头
  track 磁道
  cylinder 柱面
  sector 扇区 512bytes

区位记录磁盘扇区结构
ZBR(Zone Bit Recording)


软件包管理和yum源配置_第1张图片
磁盘寻址架构
CHS (cylinder head sector)
  采用24bit位寻址 其中前10位表示cylinder,中间8位表示head(即盘面),后面6 位表示sector。最大寻址空间8GB
LBA (logical block addressing) 逻辑块地址
  LBA 是一个整数,通过转换成CHS 格式完成磁盘具体寻址
  LBA 采用48 个bit 位寻址
    最大寻址空间128PB
    由于CHS 寻址方式的寻址空间在大概8GB 以内,所以在磁盘容量小于8GB时,可以使用CHS 寻址方式或是LBA 寻址方式;在磁盘容量大于8GB时,则只能使用LBA
# 为什么要分区
    优化I/O 性能
    实现磁盘空间配额限制
    提高修复速度
    隔离系统和程序
    安装多个OS
    采用不同文件系统
# 两种分区格式 MBR,GPT
    两种分区方式:MBR ,GPT
MBR: Master Boot Record ,1982年,使用32位表示扇区数 , 分区不超过2T
# 如何分区:按柱面
0 磁道0 扇区:512bytes
  446bytes: boot loader
  64bytes :分区表
  16bytes:  标识一个分区
  2bytes: 55AA
  4 个主分区;3 主分区+1 扩展(N 个逻辑分区)
  使用fdisk 分区
# GPT:GUID (Globals Unique Identifiers)partitiontable  支持128个 个 分区,使用64 位,支持8Z( (512Byte/block  )64Z ( ( 4096Byte/block) )
  使用128 位UUID(Universally Unique Identifier)  表示磁盘区 和分区 GPT 分区表自动备份在头和尾两份,并有CRC 校验位
# UEFI ( 统一扩展固件接口) 硬件支持GPT
  使用gdisk 分区
# 同步分区
  新增分区 centos6
    partx -a device
  删除分区
    partx -d --nr m-n device
    partx -d device
  centos5,7
  partprobe device
# 查看系统所支持的文件系统
  /lib/modules/`uname -r`/kernel/fs
Linux 文件系统:ext2(Extended file system), ext3,ext4,xfs (SGI ), btrfs (Oracle ), reiserfs, jfs( (AIX ), swap
光盘:iso9660
Windows :FAT32, exFAT,NTFS
Unix: FFS (fast ), UFS (unix ), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2 (oracle)
分布式文件系统: fastdfs,ceph, moosefs, mogilefs,glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统
软件包管理和yum源配置_第2张图片
创建ext系列文件系统
 mke2fs :ext 系列文件系统专用管理工具
  -t {ext2|ext3|ext4}
  -b {1024|2048|4096}
  -L 'LABEL'
  -j: 于 相当于 -t ext3
  mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
  -i #:  为数据空间中每多少个字节创建一个inode ;此大小不应该小于block 的大小
  -N # :指定分区中创建多少个inode
  -I  一个inode 记录占用的磁盘空间大小,128---4096
  -m #:  默认5%, 为管理人员预留空间占总空间的百分比
  -O FEATURE[,...] :启用指定特性
  -O ^FEATURE
tune2fs :重新设定ext 系列文件系统可调整参数的值
  -l :查看指定文件系统超级块信息;super block
  -L 'LABEL' :修改卷标
  -m # :修预留给管理员的空间百分比
  -j:  将ext2 升级为ext3
  -O:  文件系统属性启用或禁用, –O ^has_journal
  -o:  调整文件系统的默认挂载选项,–o ^acl
  -U UUID:  修改UUID号 号
dumpe2fs: :
  块分组管理,32768块 块
  -h :查看超级块信息,不显示分组信息
文件系统检测和修复
常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean” ”
注意:一定不要在挂载状态下修复
fsck: File System Check
  fsck.FS_TYPE
  fsck -t FS_TYPE
  -p: 自动修复错误
  -r:  交互式修复错误
  FS_TYPE 一定要与分区上已经文件类型相同
e2fsck:  ext 系列文件专用的检测修复工具
  -y:  自动回答为yes
  -f:  强制修复
mount 常用选项命令
  -t vfstype :指定要挂载的设备上的文件系统类型
  -r: readonly ,只读挂载
  -w: read and write,  读写挂载
  -n:  不更新/etc/mtab ,mount 不可见
  -a :自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab
文件中,且挂载选项中有auto 功能)
  -L 'LABEL':  以卷标指定挂载设备
  -U 'UUID':  以UUID 指定要挂载的设备
  -B, --bind:  绑定目录到另一个目录上
查看内核追踪到的已挂载的所有设备
  cat /proc/mounts
  -o options :( 挂载文件系统的选项) ,多个选项使用逗号分隔
    async :异步模式
    sync :同步模式, 内存更改时,同时写磁盘
    atime/noatime :包含目录和文件
    diratime/nodiratime :目录的访问时间戳
    auto/noauto :是否支持自动挂载, 是否支持-a 选项
    exec/noexec :是否支持将文件系统上运行应用程序
    dev/nodev :是否支持在此文件系统上使用设备文件
    suid/nosuid :不否支持suid 和sgid 权限
    remount :重新挂载
    ro :只读
    rw: : 读写
    user/nouser :是否允许普通用户挂载此设备,/etc/fstab 使用
    acl :启用此文件系统上的acl 功能
    loop:  使用loop 设备
defaults :相当于rw, nosuid, dev, exec, auto, nouser, async
处理交换文件和分区
  交换分区是系统RAM 的补充
基本设置包括:
  创建交换分区或者文件
  使用mkswap 写入特殊签名
  在/etc/fstab 文件中添加适当的条目(pri=value) 使用优先级
  使用swapon -a 

4 sed 文本文件工具

 sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed 命令处理缓冲区中的内容处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed [option] ... 'script' inputfile...
  -n 不输出模式空间内容到屏幕,即不自动打印
  -e 多点编辑
  -f 从指定文件中读取编辑脚本
  -r 支持使用扩展正则表达式
  -i.bak 备份并原处编辑
地址定界:
(1)  不给地址:对全文进行处理
(2)  单地址:
  #:  指定的行
  /pattern/ :被此处模式所能够匹配到的每一行
(3)  地址范围:
  #,# :从指定行到指定行
  #,+# :从指定行加到几行
  /pat1/,/pat2/  :被此处模式所能够匹配到的,到另个模式匹配的行,可以多段
  #,/pat1/
(4) ~ :步进
  1~2  奇数行
  2~2 偶数行
编辑命令:
  d:  删除模式空间匹配的行,并立即启用下一轮循环
  p: : 打印 当前模式空间内容,追加到默认输出 之后
  a [\]text :在指定行后面追加文本支持使用\n 实现多行追加
  i [\]text :在行前面插入文本
  c [\]text :替换行为单行或多行文本
  w /path/somefile:  保存模式匹配的行至指定文件
  r /path/somefile :读取指定文件的文本至模式空间中
  匹配到的行后
  =:  为模式空间中的行打印行号
  !:
高级编辑命令
  P :打印模式 空间开端至\n 内容 ,并追加到默认输出之前
  h:  把模式空间中的内容覆盖至保持空间中
  H :把模式空间中的内容追加至保持空间中
  g:  从保持空间取出数据覆盖至模式空间
  G :从保持空间取出内容追加至模式空间
  x:  把模式空间中的内容与保持空间中的内容进行互换
  n:  读取匹配到的行的下一行 覆盖 至模式空间
  N :读取匹配到的行的下一行 追加 至模式空间
  d:  删除模式空间中的行
  D :如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本 , 并 不会 读取新的 输入行,而使用 合成的模式空间 重新 启动 循环。如果 模式空间不包含换行符,则会像发出d 命令那样启动正常的新 循环
练习
 1 、删除centos7 系统/etc/grub2.cfg 文件中所有以空白开头
的行行首的空白字符
  sed -ir 's@^[[:space:]]+@@' /etc/grub2.cfg
2 、删除/etc/fstab 文件中所有以# 开头,后面至少跟一个空
白字符的行的行首的# 和空白字符
  sed -ir 's@^#[[:space:]]+@@'
3 、在centos6 系统/root/install.log 每一行行首增加#号
  sed -i 's@^@#@' /root/install.log
4 、在/etc/fstab 文件中不以# 开头的行的行首增加#号
  sed -i 's@^[^#]@#@' /etc/fstab
5 、处理/etc/fstab 路径, 使用sed 命令取出其目录名和基名
  echo "/etc/rc.d" | sed -r 's@^(/.*/)([^/]+)/?@\1@g'
  echo "/etc/rc.d" | sed -r 's@^(/.*/)([^/]+)/?@\2@g'
6 、利用sed  取出ifconfig 命令中本机的IPv4 地址
  ifconfig | sed -rn "/\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>/p;g" |  sed -r 's@[[:alpha:]:]+@@g' | sed -r 's@[[:space:]]+@\n@g' | sed -r '/^$/d'
7 、统计centos 安装光盘中Package 目录下的所有rpm 文件的以. 分隔倒数第二个字段的重复次数
  ls *.rpm | sed -r 's@.*[.](.*)[.]rpm@\1@' | sort | uniq -c
8 、统计/etc/init.d/functions 文件中每个单词的出现次数,
并排序(用grep 和sed 两种方法分别实现)
  cat /etc/init.d/functions | egrep -o "\<[[:alpha:]]+\>" | sort| uniq -c
  cat /etc/init.d/functions | sed -r 's@[^[:alpha:]]@\n@g' |sed '/^$/d' |sort | uniq -c
9 、将文本文件的n 和n+1 行合并为一行,n为奇数行
  cat fstab | sed 'N;s@\n@@g'

你可能感兴趣的:(软件包管理和yum源配置)