zoukankan      html  css  js  c++  java
  • 马哥Linux SysAdmin学习笔记(一)

    Linux入门
    Linux系统管理:
    磁盘管理,文件系统管理
    RAID基础原理,LVM2
    网络管理:TCP/IP协议,Linux网络属性配置
    程序包管理:rpm,yum
    进程管理:htop,glance,tsar等
    sed和awk
    Linux系统开机流程
    内核管理基础知识:编译内核,模块
    Linux系统裁剪
    kernel+busybox
    课外作业:LFS
    回顾:find,特殊权限,if语句
    Linux磁盘管理:
    I/O Ports:I/O设备地址
    一切皆文件:
    open(),read(),write(),close()
    块设备:block,存取单位"块",磁盘
    字符设备:char,存取单位"字符",键盘
    设备文件:关联至一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信
    设备号码:
    主设备号:major number,标识设备类型
    次设备号:minor number,标识同一类型下的不同设备
    硬盘接口类型:
    并行
    IDE:133MB/s
    SCSI:640MB/s
    串口
    SATA:6Gbps
    SAS:6Gbps
    USB:480MB/s
    rpm:rotations per minute
    /dev/DEV_FILE
    磁盘设备的设备文件命名:
    IDE:/dev/hd
    SCSI,STAT,SAS,USB:/dev/sd
    不同设备:a-z
    /dev/sda,/dev/sdb...
    同一设备上的不同分区:1,2,3...
    /dev/sda1,/dev/sda2
    机械式硬盘:
    track:磁道
    cylinder:柱面
    secotr:扇区
    512bytes
    如何分区:
    按柱面
    0磁道0扇区:512bytes
    MBR:Master Boot Record
    446bytes:boot loader
    64bytes:分区表
    16bytes:标识一个分区
    2bytes:55AA
    4个主分区:
    3主分区+1扩展(N个逻辑分区)
    问题:UEFI,GPT
    分区管理工具:fdisk,parted,sfdisk
    fidsk:对于一块硬盘来讲,最多只能管理15个分区
    fdisk -l [-u] [device...]
    fdisk device
    子命令:管理功能
    p:print,显示已有分区
    n:new,创建
    d:delete,删除
    w:write,写入磁盘并退出
    q:quit,放弃更新并退出
    m:获取帮助
    l:列表所分区id
    t:调整分区id
    查看内核是否已经识别新分区:
    cat /proc/partations
    通知内核重新读取硬盘分区表:
    partx -a /dev/DEVICE
    -n M:N
    M
    :N
    kpartx -a /dev/DEVICE
    -f: force
    CentOS 5:使用partprobe
    partprobe [/dev/DEVICE]
    Linux文件系统管理:
    Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
    swap:交换分区
    光盘:ISO9660
    Windows:fat32,ntfs
    Unix:FFS,UFS,JFS2
    网络文件系统:NFS,CIFS
    集群文件系统:GFS2,OCFS2
    分布式文件系统:ceph,
    moosefs,mogilefs,glusterfs,lustre
    根据其是否支持'journal'功能:
    日志型文件系统:ext3,ext4,xfs...
    非日志型文件系统:ext2,vfat
    文件系统的组成部分:
    内核中的模块:ext4,xfs,vfat
    用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat
    Linux的虚拟文件系统:VFS
    创建文件系统:
    mkfs命令:
    1.mkfs.FS_TYPE /dev/DEVICE
    ext4
    xfs
    btrfs
    vfat
    2.mkfs -t FS_TYPE /dev/DEVICE
    -L 'LABEL':设定卷标
    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
    -m #:为管理人员预留的空间占据的百分比,默认5%
    -O FEATURE[,...]:启用指定特性
    -O ^FEATURE:关闭指定特性
    mkswap:创建交换分区
    mkswap [options] device
    -L 'LABEL'
    前提:调整其分区的ID为82
    其他常用工具:
    blkid:块设备属性信息查看
    blkid [OPTION]... [DEVICE]
    -U UUID:根据指定的UUID来查找对应的设备
    -L LABEL:根据指定的LABEL来查找对应的设备
    e2label:管理ext系列文件系统的label信息
    e2label DEVICE [LABEL]
    tune2fs:重新设定ext系列文件系统可调整参数的值
    -l:查看指定文件系统超级块信息:super block
    -L 'LABEL':修改卷标
    -m #:修改预留给管理员的空间百分比
    -j:将ext2升级为ext3
    -O:文件系统属性启用或禁用
    -o:调整文件系统的默认挂载选项
    -U UUID:修改UUID号
    dumpe2fs:
    -h:查看超级块信息
    文件系统检测:
    fsck:file system check
    fsck.FS_TYPE
    fsck -t FS_TYPE
    -a:自动修复错误
    -r:交互式修复错误
    注意:FS_TYPE一定要与分区上已有文件类型相同
    e2fsck:ext系列文件专用的检测修复工具
    -y:自动回答为yes
    -f:强制修复
    回顾:
    磁盘接口类型,磁盘分区,fdisk,mkfs,mke2fs,tune2fs,blkid,dumpe2fs,e2label
    vfs:xfs,ext{2|3|4},btrfs
    文件系统管理:
    将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其他文件访问入口的行为,称之为挂载.
    解除此关联关系的过程称之为卸载
    设备挂载点:Mount Point
    mount
    卸载时:可使用设备,也可以使用挂载点
    umount
    注意:挂载点下原有文件,在挂载完成后会被临时隐藏
    挂载方法:mount DEVICE MOUNT_POINT
    mount:通过查看/etc/mtab文件显示当前系统已挂载的所有设备
    mount [-fnrsvw] [-t vfstype] [-o options] device dir
    device:指明要挂载的设备
    1.设备文件,例如/dev/sda5
    2.卷标:-L 'LABEL',例如-L 'MYDATA'
    3.UUID,-U 'UUID'
    4.伪文件系统名称:proc,sysfs,devtmpfs,configfs
    dir:挂载点
    事先存在:建议使用空目录
    进程正在使用中的设备无法被卸载
    常用选项:
    -t vsftype:指定要挂载的设备上的文件系统类型
    -r:readonly,只读挂载
    -w:read and write,读写挂载
    -n:不更新/etc/mtab
    -a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有自动挂载功能)
    -L 'LABEL':以卷标指定挂载设备
    -U 'UUID':以UUID指定挂载设备
    -B,--bind:绑定目录到另一个目录上
    注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts
    -o options:(挂载文件系统的选项)
    async:异步模式
    sync:同步模式
    atime/noatime:包含目录和文件
    diratime/nodiratime:目录的访问时间戳
    auto/noauto:是否支持自动挂载
    exec/noexec:是否支持将文件系统上的应用程序运行为进程
    dev/nodev:是否支持在此文件系统上使用设备文件
    suid/nosuid:
    remount:重新挂载
    ro:
    rw:
    user/nouser:是否允许普通用户挂载此设备
    acl:启用此文件系统上的acl功能
    注意:上述选项可多个同时使用,彼此使用逗号分隔
    默认挂载选项:defaults
    rw, suid, dev, exec, auto, nouser, async, and relatime
    卸载命令:
    umount DEVICE
    umount MOUNT_POINT
    查看正在访问指定文件系统的进程
    fuser -v MOUNT_POINT
    终止所有正在访问指定文件系统的进程:
    fuser -km MOUNT_POINT
    挂载交换分区:
    启用:swapon
    swapon [OPTION]... [DEVICE]
    -a:激活所有的交换分区
    -p PRIORITY:指定优先级
    禁用:swapoff [OPTION]... [DEVICE]
    内存空间使用状态:
    free [OPTION]
    -m:以MB为单位
    -g:以GB为单位
    文件系统空间占用等信息的查看工具:
    df:
    -h:human-readable
    -i:inodes instead of blocks
    -P,--portability:以posix兼容的格式输出
    查看某目录总体空间占用状态:
    du:
    du [OPTIONS]... DIR
    -h:human-readable
    -s:summary
    命令总结:mount,umount,free,df,du,swapon,swapoff,fuser
    文件挂载的配置文件:/etc/fstab
    每行定义一个要挂载的文件系统:
    要挂载的设备或伪文件系统    挂载点 文件系统类型 挂载选项 转储频率 自检次序
    要挂载的设备或伪文件系统:
    设备文件,LABEL(LABEL=""),UUID(UUID=""),伪文件系统名称(proc,sysfs)
    挂载选项:
    defaults
    转储频率:
    0:不做备份
    1:每天转储
    2:每隔一天转储
    自检次序:
    0:不自检
    1:首先自检,一般只有rootfs才用1
    ...
    文件系统上的其他概念:
    iNode:index node,索引节点
    地址指针:
    直接指针:
    间接指针:
    三级指针:
    inode bitmap:对位标识每个inode空闲与否的状态信息
    链接文件:
    硬链接:
    不能够对目录进行
    不能跨分区进行
    指向同一个inode的多个不同路径,创建文件的硬链接,即为为inode创建新的引用路径,因此会增加其引用计数
    符号链接:
    可以对目录进行
    而且可以跨分区
    指向的是另一个文件的路径,其大小为指向的路径字符串长度,不增加或减少模板文件inode的引用计数
    ln [-sv] SRC DEST
    -s:symbolic link
    -v:verbose,显示过程
    文件管理操作对文件的影响:
    文件删除:
    文件复制:
    文件移动:
    练习:
    1.创建一个20G的文件系统,块大小为2048,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项
    1.创建20G分区
    2.格式化
    mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE
    3.编辑/etc/fstab
    LABEL='TEST' /testing ext4 defaults,acl 0 0
    2.创建一个5G的文件系统,卷标HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3
    3.写一个脚本,完成如下功能:
    1.列出当前系统识别到的所有磁盘设备
    2.如果磁盘数量为1,则显示其空间使用信息,否则,则显示最后一个磁盘设备的空间使用信息
    bash脚本编程之用户交互:
    read [option]... [name ...]
    -p 'PROMPT'
    -t TIMEOUT
    bash -n /path/to/some_scripts
    检查脚本中的语法错误
    bash -x /path/to/some_scripts
    #!/bin/bash
    read -p "Enter a special file:" diskfile
    [ -z "$diskfile" ] && echo "Fool" && exit 1
    if fdisk -l | grep "^Disk $diskfile" &> /dev/null;then
       fdisk -l $diskfile
    else
       echo "No such file."
       exit 2
    fi
    RAID:
    redundant arrays of inexpensive disks
    independent
    Berkeley:A case for redundant arrays of inexpensive disks RAID
    提高IO能力:
    磁盘并行读写
    提高耐用性:
    磁盘冗余来实现
    级别:多块磁盘组织在一起的工作方式有所不同
    RAID实现的方式:
    外接式磁盘阵列:通过扩展卡提供适配能力
    内接式RAID:主板集成RAID控制器
    Software RAID:
    级别:level
    RAID-0:0,条带卷,strip;
    RAID-1:1,镜像卷,mirror;
    RAID-2
    ..
    RAID-5:
    RAID-6:
    RAID10:
    RAID01:
    RAID-0:
    读写性能提升
    可用空间:N*min(S1,S2..)
    无容错能力
    最小磁盘数:2
    RAID-1:
    读性能提升,写性能下降
    可用空间:1*min(S1,S2..)
    有冗余能力
    最少磁盘数:2
    RAID-4:
    RAID-5:
    读写性能提升
    可用空间:(N-1)*min(S1,S2...)
    有容错能力:1块磁盘
    最少磁盘数:3
    RAID-6:
    读写性能提升
    可用空间(N-2)*min(S1,S2...)
    有容错能力:2
    最少磁盘数:4
    混合类型:
    RAID10:
    读写性能提升
    可用空间:N*min(S1,S2...)/2
    有容错能力:每组镜像最多只能坏1块
    最少磁盘数:4
    RAID01:
    RAID50,RAID-7:
    JBOD:just a bunch of disks
    功能:将多块磁盘的空间合并一个大的连续空间使用
    可用空间:sum(S1,S2..)
    常用级别:RAID0,RAID1,RAID5,RAID10,RAID50,JBOD
    实现方式:
    硬件实现方式
    软件实现方式
    CentOS 6上的软件RAID的实现:
    结合内核中的md(multi devices)
    mdadm:模式化的工具
    命令的语法格式:mdadm [mode] <raiddevice> [OPTIONS] <component-device>
    支持的raid级别,linear,0,1,4,5,6,10
    模式:
    创建:-C
    装配:-A
    监控:-F
    管理:-f,-r,-a
    <raiddevice>:/dev/md#
    <component-devices>:任意块设备
    -C:创建模式
    -n #:使用#个块设备来创建RAID
    -l #:指明要创建的raid级别
    -a {yes|no}:自动创建目标raid设备的设备文件
    -c CHUNK_SIZE:指明块大小
    -x #:指明空闲盘的个数
    例如,创建一个10G可用空间的RAID5:
    -D:显示raid详细信息
    mdadm -D /dev/md#
    管理模式:
    -f:标记指定磁盘为损坏
    -a:添加磁盘
    -r:移除磁盘
    观察md的状态:
    cat /proc/mdstat
    停止md设备:
    mdadm -S /dev/md#
    watch命令:
    -n #:刷新间隔,单位是秒
    watch -n# 'COMMAND'
    LVM2:
    LVM:logical volume manager,version 2
    dm:device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块
    /dev/mapper/VG_NAME-LV_NAME
    /dev/mapper/vol0-root <-- /dev/VG_NAME/LV_NAME (/dev/vol0/root)
    pv管理工具:
    pvs:简要pv信息显示
    pvdisplay:显示pv的详细信息
    pvcreate /dev/DEVICE :创建pv
    vg管理工具:
    vgs
    vgdisplay
    vgcreate  [-s#[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath  [PhysicalDevicePath...]
    vgextend  VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]]
    vgreduce  VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]]
    先做pvmove
    vgremove
    lv管理工具:
    lvs
    lvdisplay
    lvcreate -L #[mMgGtT] -n NAME  VolumeGroup
    lvremove /dev/VG_NAME/LV_NAME
    扩展逻辑卷:
    lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
    resize2fs /dev/VG_NAME/LV_NAME
    缩减逻辑卷:
    umount /dev/VG_NAME/LV_NAME
    e2fsck -F /dev/VG_NAME/LV_NAME
    resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
    lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
    mount
    快照:snapshot
    lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name
    文件系统挂载使用:
    挂载光盘设备:
    光盘设备文件:
    IDE:/dev/dhc
    SATA:/dev/sr0
    符号链接文件:
    /dev/cdrom
    /dev/cdrw
    /dev/dvd
    /dev/dvdrw
    mount -r /dev/cdrom /media/cdrom
    umount /dev/cdrom
    dd命令:covert and copy a file
    用法:
    dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
    bs=#:block size,复制单元大小
    count=#:复制多少个bs
    磁盘拷贝:
    dd if=/dev/sda of=/dev/sdb
    备份MBR:
    dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
    破坏MBR中的bootloader:
    dd if=/dev/zero of=/dev/sda bs=256 count =1 
    两个特殊设备:
    /dev/null:数据黑洞
    /dev/zero:吐零机
    btrfs文件系统:
    技术预览版
    Btrfs (B-tree,Buffer FS,Better FS),GPL,Oracle,2007,CoW
    核心特性:
    多物理卷支持:btrfs可由多个底层物理卷组成,支持RAID,以联机,移除,修改.
    写时复制更新机制(CoW):复制,更新及替换指针,而非就地更新
    数据及元数据校验码:checksum
    子卷:sub_volume
    快照:支持快照的快照
    透明压缩
    文件系统创建:
    mkfs.btrfs
    -L 'LABEL'
    -d <type>:raid0 raid1 raid5 raid6 raid10 single
    -m <profile>:raid0 raid1 raid5 raid6 raid10 single dup
    -O <feature>
    -O list-all:列出支持的所有feature
    属性查看:
    btrfs filesystem show
    挂载文件系统:
    mount -t btrfs /dev/sdb MOUNT_POINT
    透明压缩机制:
    mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
    子命令:filesystem,device,balance,subvolume
    压缩,解压缩及归档工具:
    compress/uncompress:.Z
    gzip/gunzip:.gz
    bzip2/bunzip2:.bz2
    xz/unxz:.xz
    zip/unzip:.zip
    tar,cpio
    1.gzip/gunzip:
    gzip [OPTION]... FILE...
    -d:解压缩,相当于gunzip
    -c:将结果输出至标准输出
    -#:1-9,指定压缩比
    zcat:不显示展开的前提下查看文本文件内容
    2.bzip2/bunzip2/bzcat
    bzip2 [OPTION]... FILE...
    -k:keep,保留原文件
    -d:解压缩
    -#:1-9,压缩比,默认6
    bzcat:不显示展开的前提下查看文本文件内容
    3.xz/unxz/xzcat:
    xz [OPTION]... FILE...
    -k:
    -d:
    -#:
    xzcat:不显示展开的前提下查看文本文件内容
    4.tar
    tar [OPTION]... 
    1.创建归档:
    tar -c -f /PATH/TO/SOMEFILE.tar FILE...
    2.查看归档文件中的文件列表:
    tar -t -f /PATH/TO/SOMEFILE.tar
    3.展开归档
    tar -xf /PATH/TO/SOMEFILE.tar
    tar -xf /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR
    -j:bzip2,
    -z:gzip
    -J:xz
    bash脚本编程:
    if语句,bash -n,bash -x
    循环:for,while,until
    循环体:要执行的代码,可能要执行N遍
    进入条件
    退出条件
    for循环:
    for 变量名 in 列表;do
    循环体
    done
    执行机制:
    依次将列表中的元素赋值给"变量名";每次复制后既执行一次循环体;直到列表中的元素耗尽,循环结束
    列表生成方式:
    1.直接给出字符串列表
    2.整数列表
    1.{start..end}
    2.$(seq [start [step]] end)
    3.返回列表的命令:
    $(COMMAND)
    4.glob
    5.变量引用
    $@,$*
    Linux程序包管理:
    API:application programming interface
    POSIX:Protab OS
    程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
    静态编译:
    共享编译:.so
    ABI:application binary interface
    Windows与Linux不兼容:
    库级别的虚拟化:
    Linux:WINE
    Windows:cywin
    系统级开发:
    C
    C++
    应用级开发:
    Java
    Python
    PHP
    二进制应用程序的组成部分:
    二进制文件,库文件,配置文件,帮助文件
    程序包管理器:
    Debian:deb,dpt
    Redhat:
    rpm:Redhat package manager
    RPM is package manager
    Gentoo:
    Archlinux:
    源代码:name-VERSION.tar.gz
    VERSION:major.minor.release
    rpm包命名方式:
    name-VERSION-ARCH.rpm
    VERSION:major.minor.release
    release.arch:
    release:release.OS
    常见的arch:
    x86:i386,i486,i586,i686
    x86_64:x64,x86_64,amd64
    powerrpc:ppc
    跟平台无关:noarch
    testaoo:拆包
    testapp-VERSION-ARCH.rpm 主包
    testapp-devel-VERSION-ARCH.rpm 支包
    testapp-testing-VERSION-ARCH.rpm 
    包之间:存在依赖关系
    yum:rpm包管理器的前端工具
    apt-get:deb包管理器前端工具
    zypper:suse上的rpm前端管理工具
    dnf:Fedora 22+ rpm包管理器前端管理工具
    查看二进制程序所依赖的库文件:
    ldd /PATH/TO/BINARY_FILE
    管理及查看本机装载的库文件:
    ldconfig
    /sbin/ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系
    配置文件为:/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
    缓存文件:/etc/ld.so.cache
    程序包管理:
    功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装,卸载,查询,升级和校验等管理操作
    1.程序的组成清单(每个包独有)
    文件清单
    安装或卸载时运行的脚本
    2.数据库(公共)
    程序包名称及版本
    依赖关系
    功能说明
    安装生成的个文件文件路径及校验码信息
    管理程序包的方式:
    使用包管理器:rpm
    使用前端工具:yum,dnf
    获取程序包的途径:
    1.系统发行版的光盘或官方服务器
    CentOS镜像:
    http://mirrors.aliyun.com
    http://mirrors.sohu.com
    http://mirrors.163.com
    2.项目官方站点
    3.第三方组织
    Fedora-EPEL
    搜索引擎:
    http://pkgs.org
    http://rpmfind.net
    http://rpm.pbone.net
    4.自己制作
    建议:检查其合法性
    来源合法性
    程序包的完整性
    CentOS系统上rpm命令管理程序包:
    安装,卸载,升级,查询,校验,数据维护
    安装:
    rpm {-i|--install} [install-options] PACKAGE_FILE ...
    -v:verbose
    -vv:
    -h:以#显示程序包管理执行进度:每个#表示%2的进度
    rpm -ivh PACKAGE_FILE ...
    [install-option]
    --test:测试安装,但不执行真正安装过程,dry run模式
    --nodeps:忽略依赖关系
    --replacepkgs:重新安装
    --nosignature:不检查来源合法性
    --nodigest:不检查包完整性
    --noscripts:不执行程序包脚本片断
    %pre:安装前脚本 --nopre
    %post:安装后 --nopost
    %preun:卸载前 --nopreun
    %postun:卸载后 --nopostun
    升级:
    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
    upgrade:安装有旧版程序包,则升级,如果不存在旧版程序包,则安装
    freeshen:安装有旧版程序包,则升级,如果不存在,则不执行升级操作
    rpm -Uvh PACKAGE_FILE...
    rpm -Fvh PACKAGE_FILE...
    --oldpackage:降级
    --force:强制升级
    注意:
    1.不要对内核执行升级操作:Linux支持多内核版本并存,因此,对直接安装新版本内核
    2.如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
    查询:
    rpm {-q|--query} [select-options] [query-options]
    [select-options]
    -a:所有包
    -f:查询指定的文件由哪个程序包安装生成
    -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作
    --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
    --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
    [query-options]
    --changelog:查询rpm包的changlog
    -c:查询程序的配置文件
    -d:查询程序的帮助手册
    -i:information
    -l:查看指定程序包安装后生成的所有文件
    --scripts:程序包自带的脚本片断
    -R:查询指定的程序包所依赖的CAPABILITY
    --provices:列出指定程序包所提供的CAPABILITY
    用法:
    -qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
    -qpi PACKAGE_FILE,-qpl PACKAGE_FILE
    -qa
    卸载:
    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
               [--notriggers] [--test] PACKAGE_NAME ...
        校验:
        rpm {-V|--verify} [select-options] [verify-options]
    S file Size differs
    M Mode differs (includes permissions and file type)
    5 digest (formerly MD5 sum) differs
    D Device major/minor number mismatch
    L readLink(2) path mismatch 
    U User ownership differs
    G Group ownership differs
    T mTime differs
    P caPabilities differ
    包来源合法性验证及完整性验证:
    完整性验证:SHA256
    来源合法性验证:RSA
    公钥加密:
    对称加密:加密,解密使用同一密钥
    非对称加密:密钥是成对的
    public key:公钥
    secret key:私钥
    导入所需的公钥:
    rpm --import /PATH/FORM/GPG-PUBKEY-FILE
    CentOS 7 发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
    数据库重建:
    rpm {--initdb|--rebuilddb}
    initdb:初始化
    如果不存在数据库,则新建
    rebuilddb:重建
    无论是否存在,直接重新创建数据库
    程序包管理2:
    CentOS:yum,dnf
    YUM:yellow dog,yellowdog update modifier
    yum repository:yum repo
    存储了众多rpm包,以及包的相关元数据文件(放置于特定目录:repodata)
    文件服务器:
    ftp://
    http://
    nfs://
    file:///
    yum客户端:
    配置文件:
    /etc/yum.conf:为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo:为仓库的指向提供配置信息
    仓库指向的定义
    [repositoryid]
    name=Some name for this repository
    baseurl=url://server1/path/to/repository/
    url://server2/path/to/repository/
    url://server3/path/to/repository/
    enabled={1|0}
    gpgcheck={1|0}
    gpgkey=URL
    enablegroups={1|0}
    failovermethod={roundrobin|priority}
    默认为roundrobin,随机挑选
    cost=
    默认1000
    yum命令的用法:
    yum [options] [command] [package ...]
    * install package1 [package2] [...]
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * update-minimal [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * autoremove [package1] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache [fast]
    * groups [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
    (maintained for legacy reasons only - use repoquery or yum provides)
    * localinstall rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * repoinfo [all|enabled|disabled]
    * repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [...]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * load-transaction [txfile]
    * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel]
    * fssnapshot [summary | list | have-space | create | delete]
    * fs [filters | refilter | refilter-cleanup | du]
    * check
    * help [command]
    显示仓库列表:
    repolist [all|enabled|disabled]
    显示程序包:
    list
    yum list [all|glob_exp1] [glob_exp2] [...]
    yum list {available|installed|updates} [glob_exp1] [...]
    安装程序包:
    install pkg1 [pkg2] [...]
    reinstall package1 [package2] [...]  重新安装
    升级程序包:
    update [pkg1] [pkg2] [...]
    downgrade package1 [package2] [...] 降级
    检查可用升级:
    check-update
    卸载程序包:
    remove | erase pkg1 [pkg2] [...]
    查看程序包information:
    info [...]
    查看指定特性(可以是某文件)是由哪个程序包所提供:
    provides | whatprovides feature1 [feature2] [...]
    清理本地缓存:
    clean [packages | metadata | expire-cache | rpmdb | plugins | all]
    构建缓存:
    makecache
    搜索:
    search string1 [string2] [...]
    搜索程序包名及summary信息
    查看指定包所依赖的capabilities
    deplist package1 [package2] [...]
    查看yum事务历史:
    history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    安装及升级本地程序包:
    localinstall rpmfile1 [rpmfile2] [...]
    (maintained for legacy reasons only - use install)
    localupdate rpmfile1 [rpmfile2] [...]
    包管理的相关命令:
    groupinstall group1 [group2] [...]
    groupupdate group1 [group2] [...]
    grouplist [hidden] [groupwildcard] [...]
    groupremove group1 [group2] [...]
    groupinfo group1 [...]
    如何使用光盘作为本地yum仓库:
    1.挂载光盘至某目录,例如/media/cdrom
    mount -r -t iso9660 /dev/cdrom /media/cdrom
    2.创建配置文件
    [base]
    name=CentOS 7 Release 7.2.1511
    baseurl=file:///mnt
    enabled=1
    gpgcheck=0
    yum的命令行选项:
    --nogpgcheck:禁止进行gpg check
    -y:自动回答为yes
    -q:静默模式
    --disablerepo=repoidglob:临时禁用此处指定的repo
    --enablerepo=repoidglob:临时启用此处指定的repo
    --noplugins:禁用所有插件
    yum的repo配置文件中可用的变量:
    $releaserver:当前OS发行版的主版本号
    $arch:平台
    $basearch:基础平台
    $YUM0-$YUM9
    http://mirrors.magedu.com/centos/$releaserver/$basearch/os
    创建yum仓库:
    createrepo [options] <directory>
    程序包编译安装:
    testapp-VERSION-release.src.rpm --> 安装后使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
    源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行
    源代码组织格式:
    多文件:文件中的代码之间,很可能存在跨文件依赖关系
    C,C++: make (configure --> Makefile.in --> makefile)
    java:maven
    编译安装:
    ./configure
    1.通过选项传递参数,指定启用特性,安装路径等.执行时会参考用户的指定以及Makefile.in文件生成makefile
    2.检查依赖到的外部环境
    make
    根据makefile文件,构建应用程序
    make install
    开发工具:
    autoconf:生成configure脚本
    automake:生成Makefile.in
    建议:安装前查看INSTALL,README
    开源程序源代码的获取:
    官方自建站点:
    apache.org(ASF)
    mariadb.org
    代码托管:
    SourceForge
    Github.com
    code.google.com
    c/c++:gcc (GNU C Complier)
    编译C源代码:
    前提:提供开发工具及开发环境
    开发工具:make,gcc等
    开发环境:开发库,头文件
    glibc:标准库
    通过"包组"提供开发组件
    1.configure脚本
    选项:指定安装位置,指定启用的特性
    --help:获取其支持使用的选项
    选项分类:
    安装路径设定:
    --prefix=/PATH/TO/SOMEWHERE:指定默认安装位置
    --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装路径
    system types:
    optional features:可选特性
    --disable-FEATURE
    --enable-FEATURE[=ARG]
    optional packages:可选包
    --with-PACKAGE[=ARG]
    --without-PACKAGE
    2.make
    3.make install
    安装后的配置:
    1.导出二进制程序目录至PATH环境变量
    编辑文件/etc/profile.d/name.sh
    export PATH=/PATH/TO/BIN:$PATH
    2.导出库文件路径
    编辑/etc/ld.so.conf.d/NAME.conf
    添加新的库文件所在目录至此文件中
    让系统重新生成缓存:
    ldconfig [-v]
    3.导出头文件
    基于链接的方式实现:
    ln -sv 
    4.导出帮助手册:
    编辑/etc/man.config文件
    添加一个MANPATH
    练习:
    1.yum的配置和使用,包括yum repositroy的创建
    2.编译安装apache 2.2;启动此服务
    博客作业:程序包管理 rpm/yum/编译
  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/redheat/p/7145616.html
Copyright © 2011-2022 走看看